3D Bubble Charts in Julia
How to make 3D Bubble Charts in Julia with Plotly. Three examples of 3D Bubble Charts.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try Plotly Studio now.
Note: We are retiring documentation for R, MATLAB, Julia, and F# in November 2025. Learn more about this change here.
3d Bubble chart with Plotly Express
using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "gapminder")
trace = scatter3d(
df,
x=:year,
y=:continent,
z=:pop,
mode="markers",
marker=attr(
size=:gdpPercap,
color=:lifeExp,
sizeref=maximum(df.gdpPercap) / 60^2,
sizemode="area"
)
)
layout = Layout(scene_zaxis_type="log")
plot(trace, layout)
Simple Bubble Chart
using PlotlyJS, CSV, DataFrames, HTTP
df = CSV.File(
HTTP.get("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv").body
) |> DataFrame
start = 750
stop = 1500
trace = scatter3d(
x=df[!, "year"][start:stop],
y=df[!, "continent"][start:stop],
z=df[!, "pop"][start:stop],
text=df[!, "country"][start:stop],
mode="markers",
marker=attr(
sizemode="diameter",
sizeref=750,
size=df[!, "gdpPercap"][start:stop],
color=df[!, "lifeExp"][start:stop],
colorscale="Viridis",
colorbar_title="Life<br>Expectancy",
line_color="rgb(140,140,170)"
)
)
layout = Layout(height=800, width=800, title="Examining Population and Life Expectancy Over Time")
plot(trace, layout)
Bubble Chart Sized by a Variable
Plot planets' distance from sun, density, and gravity with bubble size based on planet size
using PlotlyJS
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"]
planet_colors = ["rgb(135, 135, 125)", "rgb(210, 50, 0)", "rgb(50, 90, 255)",
"rgb(178, 0, 0)", "rgb(235, 235, 210)", "rgb(235, 205, 130)",
"rgb(55, 255, 217)", "rgb(38, 0, 171)", "rgb(255, 255, 255)"]
distance_from_sun = [57.9, 108.2, 149.6, 227.9, 778.6, 1433.5, 2872.5, 4495.1, 5906.4]
density = [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638, 2095]
gravity = [3.7, 8.9, 9.8, 3.7, 23.1, 9.0, 8.7, 11.0, 0.7]
planet_diameter = [4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528, 2370]
# Create trace, sizing bubbles by planet diameter
trace = scatter3d(
x = distance_from_sun,
y = density,
z = gravity,
text = planets,
mode = "markers",
marker = attr(
sizemode = "diameter",
sizeref = 750, # info on sizeref: https://plotly.com/julia/reference/scatter/#scatter-marker-sizeref
size = planet_diameter,
color = planet_colors,
)
)
layout = Layout(
width=800,
height=800,
title = "Planets!",
scene = attr(
xaxis=attr(
title="Distance from Sun",
titlefont_color="white"
),
yaxis=attr(
title="Density",
titlefont_color="white"
),
zaxis=attr(
title="Gravity",
titlefont_color="white"
),
bgcolor = "rgb(20, 24, 54)"
)
)
plot(trace, layout)
Edit the Colorbar
Plot planets' distance from sun, density, and gravity with bubble size based on planet size
using PlotlyJS
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"]
temperatures = [167, 464, 15, -20, -65, -110, -140, -195, -200, -225]
distance_from_sun = [57.9, 108.2, 149.6, 227.9, 778.6, 1433.5, 2872.5, 4495.1, 5906.4]
density = [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638, 2095]
gravity = [3.7, 8.9, 9.8, 3.7, 23.1, 9.0, 8.7, 11.0, 0.7]
planet_diameter = [4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528, 2370]
# Create trace, sizing bubbles by planet diameter
trace = scatter3d(
x = distance_from_sun,
y = density,
z = gravity,
text = planets,
mode = "markers",
marker = attr(
sizemode = "diameter",
sizeref = 750, # info on sizeref: https://plotly.com/julia/reference/scatter/#scatter-marker-sizeref
size = planet_diameter,
color = temperatures,
colorbar_title = "Mean<br>Temperature",
colorscale=[[0, "rgb(5, 10, 172)"], [.3, "rgb(255, 255, 255)"], [1, "rgb(178, 10, 28)"]]
)
)
layout = Layout(
width=800,
height=800,
title = "Planets!",
scene = attr(
xaxis=attr(
title="Distance from Sun",
titlefont_color="white"
),
yaxis=attr(
title="Density",
titlefont_color="white"
),
zaxis=attr(
title="Gravity",
titlefont_color="white"
),
bgcolor = "rgb(20, 24, 54)"
)
)
plot(trace, layout)
Reference
See https://plotly.com/julia/reference/scatter3d/ and https://plotly.com/julia/reference/scatter/#scatter-marker-sizeref <br>for more information and chart attribute options!