散点,散点
|
该页面正在翻译中。 |
#
<无翻译>*马基科。散点,散点*-Function
scatter(positions)
scatter(x, y)
scatter(x, y, z)
为每个元素绘制一个标记 (x,y,z), (x,y),或 职位.
地块类型
绘图类型别名 散点,散点 功能是 散点,散点.
例子:
使用积分
也可以将坐标作为点的向量传递,如果坐标应该在以后更新,这是优选的,以避免x和y的不同长度。
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)
标记物
您可以使用几种不同类别的标记 散点,散点:
-
查尔就像'x'或'α'. 字形取自Makie的默认字体TeX Gyre Heros Makie. -
贝塞尔路径可用于创建自定义标记形状的对象。 大多数由符号访问的默认标记,例如:圆或:rect转换为贝塞尔路径s内部。 -
多边形s,相当于构造贝塞尔路径我们完全不在利奈托命令。 -
矩阵{<:Colorant}被绘制为图像散射体的对象。 -
特殊标记,如
圆和校长它们有自己的后端实现,可以更快地显示。
默认标记
using CairoMakie
markers_labels = [
(:circle, ":circle"),
(:rect, ":rect"),
(:diamond, ":diamond"),
(:hexagon, ":hexagon"),
(:cross, ":cross"),
(:xcross, ":xcross"),
(:utriangle, ":utriangle"),
(:dtriangle, ":dtriangle"),
(:ltriangle, ":ltriangle"),
(:rtriangle, ":rtriangle"),
(:pentagon, ":pentagon"),
(:star4, ":star4"),
(:star5, ":star5"),
(:star6, ":star6"),
(:star8, ":star8"),
(:vline, ":vline"),
(:hline, ":hline"),
('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
标记大小
该 标记大小 属性缩放相对于散点标记的基本大小的散点大小。 因此, 标记大小 不能直接理解像这样的单位 px,这取决于_what_被缩放。
using CairoMakie
f, ax, sc = scatter(1, 1, marker = 'A', markersize = 50)
text!(2, 1, text = "A", fontsize = 50, align = (:center, :center))
xlims!(ax, -1, 4)
f
默认值 贝塞尔路径 标记像 :圆, :rect, :utriangle 等。 被选中使它们大致匹配 查尔 相同标记大小的标记。 这使得切换标记更容易,而不会使整体外观发生太大变化。 但是,两者都 查尔 和 贝塞尔路径 标记不完全 标记大小 高还是宽。 我们可以通过绘制一些 查尔s, 贝塞尔路径s, 圆 和 校长 在一条宽度的线的前面 50. 你可以看到,只有特殊的标记 圆 和 校长 匹配线宽,因为它们的基本大小是1x1,但是它们不匹配 查尔s或 贝塞尔路径it’很好。
</无翻译>
using CairoMakie
f, ax, l = lines([0, 1], [1, 1], linewidth = 50, color = :gray80)
for (marker, x) in zip(['X', 'x', :circle, :rect, :utriangle, Circle, Rect], range(0.1, 0.9, length = 7))
scatter!(ax, x, 1, marker = marker, markersize = 50, color = :black)
end
f
如果您需要一个具有某些精确基本大小的标记,以便可以将其与已知大小的线或其他绘图对象匹配,或者因为您想在数据空间中使用该标记,则可以自 贝塞尔路径 或 多边形. 一个基本大小为1x1的标记,例如,将被缩放为 线条 何时 标记大小 和 线宽 都是一样的,就像 圆 和 校长 标记。
using CairoMakie
hexagon = Makie.Polygon([Point2f(cos(a), sin(a)) for a in range(1/6 * pi, 13/6 * pi, length = 7)])
points = Point2f[(0, 0), (sqrt(3), 0), (sqrt(3)/2, 1.5)]
scatter(points,
marker = hexagon,
markersize = 1,
markerspace = :data,
color = 1:3,
axis = (; aspect = 1, limits = (-2, 4, -2, 4)))
贝塞尔路径标记
贝塞尔路径是矢量图形格式(如svg和pdf)的基础,由几个不同的操作组成,可以定义复杂的形状。
|
注意未填充的标记(如单线或曲线)在CairoMakie中是可能的,但在GLMakie和Wglmakie中则不行,因为这些后端必须首先将标记作为填充形状呈现到纹理中。 如果无法渲染填充,则标记将不可见。 CairoMakie,另一方面可以毫无问题地中风这样的标记。 |
using CairoMakie
arrow_path = BezierPath([
MoveTo(Point(0, 0)),
LineTo(Point(0.3, -0.3)),
LineTo(Point(0.15, -0.3)),
LineTo(Point(0.3, -1)),
LineTo(Point(0, -0.9)),
LineTo(Point(-0.3, -1)),
LineTo(Point(-0.15, -0.3)),
LineTo(Point(-0.3, -0.3)),
ClosePath()
])
scatter(1:5,
marker = arrow_path,
markersize = range(20, 50, length = 5),
rotation = range(0, 2pi, length = 6)[1:end-1],
)
洞
using CairoMakie
circle_with_hole = BezierPath([
MoveTo(Point(1, 0)),
EllipticalArc(Point(0, 0), 1, 1, 0, 0, 2pi),
MoveTo(Point(0.5, 0.5)),
LineTo(Point(0.5, -0.5)),
LineTo(Point(-0.5, -0.5)),
LineTo(Point(-0.5, 0.5)),
ClosePath(),
])
scatter(1:5,
marker = circle_with_hole,
markersize = 30,
)
从svg路径字符串构建
您还可以从https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#path_commands[svg路径规范字符串]。 您可以使用关键字自动调整路径大小并翻转y轴和x轴(svgs通常有一个y向下增加的坐标系) 适合, 飞舞,飞舞,而 flipx的. 默认情况下,拟合路径的边界框是以零为中心的宽度为1的正方形。 你可以通过一个不同的边界 校长 与 bbox的 关键字参数。 默认情况下,路径的方面保持不变,如果它与新的边界框不匹配,则路径居中,以便适合内部。 套装 keep_aspect=错误 将路径挤入边界框,而忽略其原始宽高比。
using CairoMakie
batsymbol_string = "M96.84 141.998c-4.947-23.457-20.359-32.211-25.862-13.887-11.822-22.963-37.961-16.135-22.041 6.289-3.005-1.295-5.872-2.682-8.538-4.191-8.646-5.318-15.259-11.314-19.774-17.586-3.237-5.07-4.994-10.541-4.994-16.229 0-19.774 21.115-36.758 50.861-43.694.446-.078.909-.154 1.372-.231-22.657 30.039 9.386 50.985 15.258 24.645l2.528-24.367 5.086 6.52H103.205l5.07-6.52 2.543 24.367c5.842 26.278 37.746 5.502 15.414-24.429 29.777 6.951 50.891 23.936 50.891 43.709 0 15.136-12.406 28.651-31.609 37.267 14.842-21.822-10.867-28.266-22.549-5.549-5.502-18.325-21.147-9.341-26.125 13.886z"
batsymbol = BezierPath(batsymbol_string, fit = true, flipy = true)
scatter(1:10,marker=batsymbol,markersize=50,color=:black)
多边形标记
人们也可以使用 几何学。波尔吉恩 作为标记。 多边形总是需要一个构成轮廓的点矢量。 它也可以采用点的矢量的可选矢量,每个点在轮廓形状中形成一个孔。
using CairoMakie
using GeometryBasics
p_big = decompose(Point2f, Circle(Point2f(0), 1))
p_small = decompose(Point2f, Circle(Point2f(0), 0.5))
scatter(1:4, fill(0, 4), marker=Polygon(p_big, [p_small]), markersize=100, color=1:4, axis=(limits=(0, 5, -1, 1),))
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
标记空间
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
机场位置示例
using CairoMakie
using DelimitedFiles
a = readdlm(assetpath("airportlocations.csv"))
scatter(a[1:50:end, :], marker = '✈',
markersize = 20, color = :black)
处理glmakie中的轮廓工件
在GLMakie中,3d散点图可以根据标记的渲染顺序生成轮廓伪影。 目前有几种方法可以缓解这个问题,但它们都是有代价的:
-
fxaa=真将禁用散点标记的本机抗锯齿,并使用fxaa代替。 这导致不太详细的标记,特别是对于像字符这样的薄标记。 -
透明度=真将在一定程度上禁用深度测试,导致所有标记都被渲染而没有伪影。 然而,有了这个标记总是有一定程度的透明度 -
透支=真将完全禁用深度测试(读取和写入)的情节,删除工件。 然而,这将改变标记的z顺序,并允许稍后渲染的图显示在散点图的顶部 -
depthsorting=真将在渲染之前按深度对标记进行排序以解决问题。 这只适用于情节调用,所以当涉及其他情节时,问题可能会重新出现。
using GLMakie
ps = rand(Point3f, 500)
cs = rand(500)
f = Figure(size = (900, 650))
Label(f[1, 1], "base", tellwidth = false)
scatter(f[2, 1], ps, color = cs, markersize = 20, fxaa = false)
Label(f[1, 2], "fxaa = true", tellwidth = false)
scatter(f[2, 2], ps, color = cs, markersize = 20, fxaa = true)
标签(f[3,1],"透明度=true",tellwidth=false)
scatter(f[4,1],ps,color=cs,markersize=20,transparency=true)
标签(f[3,2],"overdraw=true",tellwidth=false)
scatter(f[4,2],ps,color=cs,markersize=20,overdraw=true)
标签(f[1,3],"depthsorting=true",tellwidth=false)
scatter(f[2,3],ps,color=cs,markersize=20,depthsorting=true)
标签(f[3,3],"depthsorting=true",tellwidth=false)
scatter(f[4,3],ps,color=cs,markersize=20,depthsorting=true)
网丝!(Rect3f(Point3f(0),Vec3f(0.9,0.9,0.9)),颜色=:橙色)
f
属性
夹式飞机
默认值为 自动的
剪辑平面提供了一种在3D空间中进行剪辑的方法。 您可以设置最多8个向量 平面3f 飞机在这里,后面的情节将被裁剪(即变得不可见)。 默认情况下,剪辑平面继承自父绘图或场景。 您可以删除父 夹式飞机 通过传递 平面3f[].
颜色
默认值为 @继承markercolor
using CairoMakie
fig = Figure()
kwargs = (; markersize = 30, axis = (; limits = (0, 4, 0, 4)))
scatter(fig[1, 1], 1:3; kwargs..., color = :tomato)
scatter(fig[1, 2], 1:3; kwargs..., color = [RGBf(1, 0, 0), RGBf(0, 1, 0), RGBf(0, 0, 1)])
scatter(fig[2, 1], 1:3; kwargs..., color = [10, 20, 30])
scatter(fig[2, 2], 1:3; kwargs..., color = [10, 20, 30], colormap = :plasma)
fig
颜色表
默认值为 @继承colormap:viridis
设置为数字采样的颜色表 颜色s. PlotUtils.cgrad(。..), 麦琪反向(any_colormap) 也可以使用,或者来自ColorBrewer或PlotUtils的任何符号。 要查看所有可用的颜色渐变,您可以调用 麦琪可用_gradients().
</无翻译>
using CairoMakie
fig = Figure()
kwargs = (; markersize = 30, axis = (; limits = (0, 6, 0, 6)))
scatter(fig[1, 1], 1:5; kwargs..., color = 1:5, colormap = :viridis)
scatter(fig[1, 2], 1:5; kwargs..., color = 1:5, colormap = :plasma)
scatter(fig[2, 1], 1:5; kwargs..., color = 1:5, colormap = Reverse(:viridis))
scatter(fig[2, 2], 1:5; kwargs..., color = 1:5, colormap = [:tomato, :slategray2])
fig
marker_offset
默认值为 Vec3f(0)
using CairoMakie
fig = Figure()
scatter(fig[1, 1], [Point2f(0) for _ in 1:5]; marker = Circle, markersize = 30,
marker_offset = [(0, 0), (-50, 0), (0, -50), (50, 0), (0, 50)],
color = [:black, :blue, :green, :red, :orange])
scatter(fig[1, 2], [Point3f(0) for _ in 1:7]; marker = :ltriangle, markersize = 0.2, markerspace = :data,
marker_offset = Vec3f[(0, 0, 0), (-1, 0, 0), (0, -1, 0), (1, 0, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)],
color = [:black, :blue, :green, :red, :orange, :cyan, :purple])
fig
标记大小
默认值为 @继承markersize
通过相对于每个标记的基本大小进行缩放来设置标记的大小。 A 真实的 按相同数量缩放x和y尺寸。 A 维克 或 元组 有两个元素分别缩放x和y。 一个单独缩放每个标记的数组。 人类将标记的区域视为其大小,其大小与 标记大小,所以乘 标记大小 通过2导致一个标记是4倍大,视觉上。
</无翻译>
using CairoMakie
fig = Figure()
kwargs = (; marker = Rect, axis = (; limits = (0, 4, 0, 4)))
scatter(fig[1, 1], 1:3; kwargs..., markersize = 30)
scatter(fig[1, 2], 1:3; kwargs..., markersize = (30, 20))
scatter(fig[2, 1], 1:3; kwargs..., markersize = [10, 20, 30])
scatter(fig[2, 2], 1:3; kwargs..., markersize = [(10, 20), (20, 30), (40, 30)])
fig
轮调
默认值为 广告牌()
using CairoMakie
fig = Figure()
kwargs = (; marker = :utriangle, markersize = 30, axis = (; limits = (0, 4, 0, 4)))
scatter(fig[1, 1], 1:3; kwargs...)
scatter(fig[1, 2], 1:3; kwargs..., rotation = deg2rad(45))
scatter(fig[1, 3], 1:3; kwargs..., rotation = deg2rad.([0, 45, 90]))
fig
[医]斯特罗克色
默认值为 @继承markerstrokecolor
using CairoMakie
fig = Figure()
kwargs = (; markersize = 30, strokewidth = 3)
scatter(fig[1, 1], 1:3; kwargs..., strokecolor = :tomato)
scatter(fig[1, 2], 1:3; kwargs..., strokecolor = [RGBf(1, 0, 0), RGBf(0, 1, 0), RGBf(0, 0, 1)])
fig