code: def create_3d_scatter_series(
      np_row_wise,
      title="Scatter",
      series_name="Series",
      xtitle="x",
      ytitle="y",
      ztitle="z",
      mode="lines",
      color=((217, 217, 217, 0.14),),
      marker_size=5,
      line_width=0.8,
      labels=None,
      fill_axis=-1,
      plotly_obj=None,
      layout_config=None,
  ):
      """
      Create a 3D scatter Plotly graph from a 3 column numpy array
      :param np_row_wise: 3 column numpy data array [(x0,y0,z0), (x1,y1,z1) ...]
      :param title: Chart title
      :param series_name: Series name
      :param xtitle: X-axis title
      :param ytitle: Y-axis title
      :param ztitle: Z-axis title
      :param labels: label (text) per point on the scatter graph
      :param fill_axis: fill area under the curve
      :param layout_config: additional layout configuration
      :return: Plotly chart dict.
      """
      if not plotly_obj:
          plotly_obj = plotly_scatter3d_layout_dict(
              title=title,
              xaxis_title=xtitle,
              yaxis_title=ytitle,
              zaxis_title=ztitle,
          )
      assert np_row_wise.ndim == 2, "Expected a 2D numpy array"
      assert (
          np_row_wise.shape[1] == 3
      ), "Expected three columns X/Y/Z e.g. [(x0,y0,z0), (x1,y1,z1) ...]"
  
      c = color[0]
      c = (int(c[0]), int(c[1]), int(c[2]), float(c[3]))
      this_scatter_data = {
          "name": series_name,
          "x": np_row_wise[:, 0].tolist(),
          "y": np_row_wise[:, 1].tolist(),
          "z": np_row_wise[:, 2].tolist(),
          "text": labels,
          "type": "scatter3d",
          "mode": mode,
          "marker": {
              "size": marker_size,
              "line": {
                  "color": "rgba(%d, %d, %d, %f.2)"
                  % (c[0], c[1], c[2], c[3]),
                  "width": line_width,
              },
              "opacity": 0.8,
          },
      }
      plotly_obj["data"].append(this_scatter_data)
  
      if layout_config:
          plotly_obj["layout"] = merge_dicts(
              plotly_obj["layout"], layout_config
          )
  
      return plotly_obj
  
imports: import json
  import numpy
  from ..errors import UsageError
  from ..utilities.dicts import merge_dicts
  from attr import attrs, attrib
label_desc: Use image node_id 5 for calling a global function with example usage: create_3d_scatter_series(np_row_wise, title, series_name, xtitle, ytitle, ztitle, mode, color, marker_size, line_width, labels, fill_axis, plotly_obj, layout_config) and returns: plotly_obj