Scatter Plots in Julia

How to make scatter plots in Julia with Plotly.


Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.

Scatter Trace Type

The scatter trace type can be used to represent scatter charts (one point or marker per observation), line charts (a line drawn between each point), or bubble charts (points with size proportional to a dimension of the observation).

To draw a scatter chart, use the scatter trace type and set the mode parameter to markers.

using PlotlyJS
# x and y given as arrays
plot(scatter(x=1:10, y=rand(10), mode="markers"))
Click to copy
# x and y given as DataFrame columns
using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "iris")
plot(scatter(df, x=:sepal_width, y=:sepal_length, mode="markers"))
Click to copy

Set size and color with column names

Note that you can set marker_size via column name and generate multiple traces using group.

using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "iris")
plot(
    df, x=:sepal_width, y=:sepal_length, color=:species,
    marker=attr(size=:petal_length, sizeref=maximum(df.petal_length) / (20^2), sizemode="area"),
    mode="markers"
)
Click to copy

Line plots

By setting mode to lines, you can draw a line chart.

using PlotlyJS
t = 0:0.01:2π
plot(
    scatter(x=t, y=cos.(t), mode="lines"),
    Layout(yaxis_title="cos(t)", xaxis_title="t")
)
Click to copy

You can also plot functions directly:

using PlotlyJS
plot(cos, 0, 2π, mode="lines", Layout(title="cos(t)"))
Click to copy

As well as DataFrames:

using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "gapminder")
df_ocean = df[df.continent .== "Oceania", :]
plot(
    df_ocean, x=:year, y=:lifeExp, color=:country, mode="lines"
)
Click to copy

Line and Scatter Plots

Use mode argument to choose between markers, lines, or a combination of both.

using PlotlyJS, Random

Random.seed!(42)

N = 100
random_x = range(0, stop=1, length=N)
random_y0 = randn(N) .+ 5
random_y1 = randn(N)
random_y2 = randn(N) .- 5

plot([
    scatter(x=random_x, y=random_y0, mode="markers", name="markers"),
    scatter(x=random_x, y=random_y1, mode="lines", name="lines"),
    scatter(x=random_x, y=random_y2, mode="markers+lines", name="markers+lines")
])
Click to copy

Bubble Scatter Plots

In bubble charts, a third dimension of the data is shown through the size of markers. For more examples, see the bubble chart docs

using PlotlyJS

plot(scatter(
    x=1:4, y=10:13, mode="markers", marker=attr(size=40:20:100, color=0:3)
))
Click to copy

Style Scatter Plots

There are many properties of the scatter trace type that control differetn aspects of the appearance of the trace. Here are a few examples

using PlotlyJS

p = plot(
    [sin, cos], 0, 10, mode="markers", marker=attr(size=10, line_width=2),
    Layout(title="Styled Scatter", yaxis_zeroline=false, xaxis_zeroline=false)
)
restyle!(p, 1, marker_color="rgba(152, 0, 0, 0.8)")
restyle!(p, 2, marker_color="rgba(255, 182, 193, 0.9)")
p
Click to copy

Data Labels on Hover

using PlotlyJS, HTTP, CSV, DataFrames

read_remote_csv(url) = DataFrame(CSV.File(HTTP.get(url).body))

df = read_remote_csv("https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv")

plot(
    df, x=:Postal, y=:Population, mode="markers", text=:State, marker_color=:Population,
    Layout(title="Populations of USA States")
)
Click to copy

Scatter with a Color Dimension

using PlotlyJS

plot(scatter(
    y=randn(500), mode="markers",
    marker=attr(size=16, color=rand(500), colorscale="Viridis", showscale=true)
))
Click to copy

Large Data Sets

Now in Plotly you can implement WebGL with scattergl() in place of scatter() <br> for increased speed, improved interactivity, and the ability to plot even more data!

using PlotlyJS

N = 100000
plot(scattergl(
    x=randn(N), y=randn(N), mode="markers",
    marker=attr(color=randn(N), colorscale="Viridis", line_width=1)
))
Click to copy

Reference

See https://plotly.com/julia/reference/scatter/ or https://plotly.com/julia/reference/scattergl/ for more information and chart attribute options!