2D Histograms in Julia
How to make 2D Histograms in Julia with Plotly.
2D Histograms or Density Heatmaps
A 2D histogram, also known as a density heatmap, is the 2-dimensional generalization of a histogram which resembles a heatmap but is computed by grouping a set of points specified by their x
and y
coordinates into bins, and applying an aggregation function such as count
or sum
(if z
is provided) to compute the color of the tile representing the bin. This kind of visualization (and the related 2D histogram contour, or density contour) is often used to manage over-plotting, or situations where showing large data sets as scatter plots would result in points overlapping each other and hiding patterns.
Density Heatmaps
You can make a density heatmap using the histogram2d
trace type and setting xbingroup="x"
and ybingroup="y"
using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "tips")
plot(df, x=:total_bill, y=:tip, xbingroyp="x", ybingroup="y", kind="histogram2d")
The number of bins can be controlled with nbinsx
and nbinsy
and the color scale with colorscale
.
using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "tips")
plot(
df, x=:total_bill, y=:tip, xbingroyp="x", ybingroup="y", kind="histogram2d",
nbinsx=20, nbinsy=20, colorscale="Viridis"
)
Density heatmaps can also be faceted:
using PlotlyJS, CSV, DataFrames
df = dataset(DataFrame, "tips")
plot(
df, x=:total_bill, y=:tip, xbingroyp="x", ybingroup="y", kind="histogram2d",
facet_row=:sex, facet_col=:smoker
)
2D Histogram of a Bivariate Normal Distribution
using PlotlyJS, Random
Random.seed!(41)
plot(histogram2d(x=randn(500), y=randn(500) .+ 1))
2D Histogram Overlaid with a Scatter Chart
using PlotlyJS, Random
x0 = randn(100) ./ 5. .+ 0.5 # 5. enforces float division
y0 = randn(100) ./ 5. .+ 0.5
x1 = rand(50)
y1 = rand(50) .+ 1.0
x = [x0; x1]
y = [y0; y1]
plot(
[
scatter(
x=x0, y=y0, mode="markers",
marker=attr(symbol="x", opacity=0.7, color="white", size=8, line_width=1)
),
scatter(
x=x1, y=y1, mode="markers",
marker=attr(symbol="circle", opacity=0.7, color="white", size=8, line_width=1)
),
histogram2d(x=x, y=y, colorscale="YlGnBu", zmax=10, nbinsx=14, nbinsy=14, zauto=false)
],
Layout(
xaxis=attr(ticks="", showgrid=false, zeroline=false, nticks=20),
yaxis=attr(ticks="", showgrid=false, zeroline=false, nticks=20),
autosize=false,
height=550,
width=550,
hovermode="closest",
showlegend=false,
)
)
Reference
See https://plotly.com/julia/reference/histogram2d/ for more information and chart attribute options!