3D Scatter Points
3D scatter charts can be created using Chart3D and 3D Point Series, meant for visualizing a collection of x-y-z coordinates by different markers, and optimized for massive amounts of data.
Bubble Chart

Creating Point Series
series = chart.add_point_series(
render_2d=False,
individual_lookup_values_enabled=True,
individual_point_color_enabled=True,
individual_point_size_axis_enabled=True,
individual_point_size_enabled=True,
)
render_2dWhenTrue, all points are rendered on a fixed 2D plane. By default this is disabled.individual_lookup_values_enabledFlag that can be used to enable data points value property on top of x, y and z. By default this is disabled.individual_point_color_enabledFlag that can be used to enable data points color property on top of x, y and z. By default this is disabled.individual_point_size_axis_enabledFlag that can be used to enable data points 'sizeAxisX', 'sizeAxisY' and 'sizeAxisZ' properties on top of x, y and z. By default this is disabled.individual_point_size_enabledFlag that can be used to enable data points size property on top of x, y and z. By default this is disabled.
Adding Data
You can append points one at a time (or in bulk) via dictionaries, or pass three coordinate arrays.
# 1) Using a list of dicts, each with x/y/z:
data_points = [
{'x': 0, 'y': 0, 'z': 0},
{'x': 1, 'y': 2, 'z': 3},
{'x': 2, 'y': 3, 'z': 5},
]
series.add_dict_data(data_points)
# 2) Using three parallel lists:
x_vals = [0, 1, 2]
y_vals = [0, 2, 3]
z_vals = [0, 3, 5]
series.add(x_vals, y_vals, z_vals)
# 3) Or pass a single list of dicts via .add():
series.add(data_points)
Depth Testing
By default, WebGL depth testing is enabled. This means that any other 3D data that is drawn after a series AND is behind that series in the chart will not be rendered on the screen to save GPU processing. Normally, this is no concern. However, when visualizing transparent 3D objects this may result in unexpected visual results (objects missing from scene). Depth testing can be disabled with set_depth_test_enabled.
# Disable depth test so points behind will still render:
series.set_depth_test_enabled(False)
3D Color Shading
By default, 3D series are using shaded 3D color graphics. This means that the color of surfaces varies with the perceived angle, giving a sense of depth and surface shape. This can be disabled to color every part of a series with a solid color, similar to 2D graphics:
# Enable Phong shading with a specular highlight:
series.set_color_shading_style(
phong_shading=True,
specular_reflection=0.7,
specular_color='#ffffff'
)
Point Appearance
Control the look of each marker on your 3D point series.
# Change the shape of all points:
series.set_point_shape('triangle')
# Options: "cube", "sphere"
# Set a uniform fill color for every point:
series.set_point_color('#FF8800')
# Adjust the pixel size of each point:
series.set_point_size(6)
# Define a palette for dynamically looked up fill coloring for the points:
series.set_palette_point_colors(
steps=[
{'value': 10, 'color': '#FF0000', 'label': 'Min'},
{'value': 50, 'color': '#00FF00'},
{'value': 100, 'color': '#0000FF', 'label': 'Max'},
],
look_up_property='y',
)
# With formatted legend display:
series.set_palette_point_colors(
steps=[
{'value': 0, 'color': '#0000FF'},
{'value': 100, 'color': '#FF0000'},
],
look_up_property='value',
formatter_precision=2, # Decimal places
formatter_unit='mag', # Unit suffix
formatter_scale=1.5, # Scale values
formatter_type='scientific', # 'standard', 'compact', 'engineering', 'scientific'
formatter_operation='floor', # 'none', 'round', 'ceil', 'floor'
)
Enabling Individual Point Color
By default, all points share one fill color. To allow each point to have its own color:
# After feeding your data:
series.set_individual_point_color_enabled(True)
Series Utility Methods
This section works the same as for Line, to avoid duplication of guides, please refer to the section under Line
Point Cloud

LightningChart Python (LCPY) does not include a specialized “point cloud” series type out of the box. However, you can still render massive 3D point clouds by integrating LCPY's generic 3D point series with a point-cloud reader like laspy and data tools like NumPy following the examples in the link below.
Legend
Please see common legend section.