scatter
scatter(positions)
scatter(x, y)
scatter(x, y, z)
Plots a marker for each element in
(x, y, z)
,
(x, y)
, or
positions
.
Attributes
Specific to
Scatter
-
cycle::Vector{Symbol} = [:color]
sets which attributes to cycle when creating multiple plots. -
marker::Union{Symbol, Char, Matrix{<:Colorant}}
sets the scatter marker. -
markersize::Union{<:Real, Vec2f} = 9
sets the size of the marker. -
markerspace::Symbol = :pixel
sets the space in whichmarkersize
is given. SeeMakie.spaces()
for possible inputs. -
strokewidth::Real = 0
sets the width of the outline around a marker. -
strokecolor::Union{Symbol, <:Colorant} = :black
sets the color of the outline around a marker. -
glowwidth::Real = 0
sets the size of a glow effect around the marker. -
glowcolor::Union{Symbol, <:Colorant} = (:black, 0)
sets the color of the glow effect. -
rotations::Union{Real, Billboard, Quaternion} = Billboard(0f0)
sets the rotation of the marker. ABillboard
rotation is always around the depth axis. -
transform_marker::Bool = false
controls whether the model matrix (without translation) applies to the marker itself, rather than just the positions. (If this is true,scale!
androtate!
will affect the marker.)
Generic
-
visible::Bool = true
sets whether the plot will be rendered or not. -
overdraw::Bool = false
sets whether the plot will draw over other plots. This specifically means ignoring depth checks in GL backends. -
transparency::Bool = false
adjusts how the plot deals with transparency. In GLMakietransparency = true
results in using Order Independent Transparency. -
fxaa::Bool = false
adjusts whether the plot is rendered with fxaa (anti-aliasing). Note that scatter plots already include a different form of anti-aliasing when plotting non-image markers. -
inspectable::Bool = true
sets whether this plot should be seen byDataInspector
. -
depth_shift::Float32 = 0f0
adjusts the depth value of a plot after all other transformations, i.e. in clip space, where0 <= depth <= 1
. This only applies to GLMakie and WGLMakie and can be used to adjust render order (like a tunable overdraw). -
model::Makie.Mat4f
sets a model matrix for the plot. This replaces adjustments made withtranslate!
,rotate!
andscale!
. -
color
sets the color of the plot. It can be given as a named colorSymbol
or aColors.Colorant
. Transparency can be included either directly as an alpha value in theColorant
or as an additional float in a tuple(color, alpha)
. The color can also be set for each scattered marker by passing aVector
of colors or be used to index thecolormap
by passing aReal
number orVector{<: Real}
. -
colormap::Union{Symbol, Vector{<:Colorant}} = :viridis
sets the colormap that is sampled for numericcolor
s. -
colorrange::Tuple{<:Real, <:Real}
sets the values representing the start and end points ofcolormap
. -
nan_color::Union{Symbol, <:Colorant} = RGBAf(0,0,0,0)
sets a replacement color forcolor = NaN
. -
space::Symbol = :data
sets the transformation space for positions of markers. SeeMakie.spaces()
for possible inputs.
Examples
Using x and y vectors
Scatters can be constructed by passing a list of x and y coordinates.
using CairoMakie
xs = range(0, 10, length = 30)
ys = 0.5 .* sin.(xs)
scatter(xs, ys)
Using points
It is also possible to pass coordinates as a vector of points, which is preferred if the coordinates should be updated later, to avoid different lengths of x and y.
Attributes like
color
and
markersize
can be set in scalar or vector form. If you pass a vector of numbers for
color
, the attribute
colorrange
which is by default automatically equal to the extrema of the color values, decides how colors are looked up in the
colormap
.
using CairoMakie
xs = range(0, 10, length = 30)
ys = 0.5 .* sin.(xs)
points = Point2f.(xs, ys)
scatter(points, color = 1:30, markersize = range(5, 30, length = 30),
colormap = :thermal)
Available markers
As markers, you can use almost any unicode character. Currently, such glyphs are picked from the
TeX Gyre Heros Makie
font, because it offers a wide range of symbols. There is also a number of markers that can be referred to as a symbol, so that it's not necessary to find out the respective unicode character.
The backslash character examples have to be tab-completed in the REPL or editor so they are converted into unicode.
Note
The scatter markers have the same sizes that the glyphs in TeX Gyre Heros Makie have. This means that they are not matched in size or area. Currently, Makie does not have the option to use area matched markers, and sometimes manual adjustment might be necessary to achieve a good visual result.
using CairoMakie
markers_labels = [
(:rect, ":rect"),
(:star5, ":star5"),
(:diamond, ":diamond"),
(:hexagon, ":hexagon"),
(:cross, ":cross"),
(:xcross, ":xcross"),
(:utriangle, ":utriangle"),
(:dtriangle, ":dtriangle"),
(:ltriangle, ":ltriangle"),
(:rtriangle, ":rtriangle"),
(:pentagon, ":pentagon"),
(:star4, ":star4"),
(:star8, ":star8"),
(:vline, ":vline"),
(:hline, ":hline"),
(:x, ":x"),
(:+, ":+"),
(:circle, ":circle"),
('a', "'a'"),
('B', "'B'"),
('↑', "'\\uparrow'"),
('😄', "'\\:smile:'"),
('✈', "'\\:airplane:'"),
]
f = Figure()
ax = Axis(f[1, 1], yreversed = true,
xautolimitmargin = (0.15, 0.15),
yautolimitmargin = (0.15, 0.15)
)
hidedecorations!(ax)
for (i, (marker, label)) in enumerate(markers_labels)
p = Point2f(fldmod1(i, 6)...)
scatter!(p, marker = marker, markersize = 20, color = :black)
text!(p, text = label, color = :gray70, offset = (0, 20),
align = (:center, :bottom))
end
f
Marker rotation
Markers can be rotated using the
rotations
attribute, which also allows to pass a vector.
using CairoMakie
points = [Point2f(x, y) for y in 1:10 for x in 1:10]
rotations = range(0, 2pi, length = length(points))
scatter(points, rotations = rotations, markersize = 20, marker = '↑')
Vec markersize
You can scale x and y dimension of markers separately by passing a
Vec
.
using CairoMakie
f = Figure()
ax = Axis(f[1, 1])
scales = range(0.5, 1.5, length = 10)
for (i, sx) in enumerate(scales)
for (j, sy) in enumerate(scales)
scatter!(ax, Point2f(i, j),
marker = '✈',
markersize = 30 .* Vec2f(sx, sy),
color = :black)
end
end
f
Marker space
By default marker sizes are given in pixel units. You can change this by adjusting
markerspace
. For example, you can have a marker scaled in data units by setting
markerspace = :data
.
using CairoMakie
f = Figure()
ax = Axis(f[1, 1])
limits!(ax, -10, 10, -10, 10)
scatter!(ax, Point2f(0, 0), markersize = 20, markerspace = :data,
marker = '✈', label = "markerspace = :data")
scatter!(ax, Point2f(0, 0), markersize = 20, markerspace = :pixel,
marker = '✈', label = "markerspace = :pixel")
axislegend(ax)
f
Airport locations example
using CairoMakie
using DelimitedFiles
a = readdlm(assetpath("airportlocations.csv"))
scatter(a[1:50:end, :], marker = '✈',
markersize = 20, color = :black)
These docs were autogenerated using Makie: v0.17.13, GLMakie: v0.6.13, CairoMakie: v0.8.13, WGLMakie: v0.6.13