Engee 文档

散点,散点

该页面正在翻译中。

scatter(positions)
scatter(x, y)
scatter(x, y, z)

为每个元素绘制一个标记 (x,y,z), (x,y),或 职位.

地块类型

绘图类型别名 散点,散点 功能是 散点,散点.

例子:

使用x和y向量

可以通过传递x和y坐标的列表来构造散射体。 </无翻译>

using CairoMakie
xs = range(0, 10, length = 30)
ys = 0.5 .* sin.(xs)

scatter(xs, ys)
3b7adf6

使用积分

也可以将坐标作为点的向量传递,如果坐标应该在以后更新,这是优选的,以避免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)
5d3d52c

标记物

您可以使用几种不同类别的标记 散点,散点:

  • 查尔就像 'x''α'. 字形取自Makie的默认字体 TeX Gyre Heros Makie.

  • 贝塞尔路径 可用于创建自定义标记形状的对象。 大多数由符号访问的默认标记,例如 :圆:rect 转换为 贝塞尔路径s内部。

  • 多边形s,相当于构造 贝塞尔路径我们完全不在 利奈托 命令。

  • 矩阵{<:Colorant} 被绘制为图像散射体的对象。

  • 特殊标记,如 校长 它们有自己的后端实现,可以更快地显示。

默认标记

下面是一个示例图,显示了可通过以下方式访问的不同形状 符号s,以及几个字符。 </无翻译>

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
842c055

标记大小

标记大小 属性缩放相对于散点标记的基本大小的散点大小。 因此, 标记大小 不能直接理解像这样的单位 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
8ad9e74

默认值 贝塞尔路径 标记像 :圆, :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
513b7e3

如果您需要一个具有某些精确基本大小的标记,以便可以将其与已知大小的线或其他绘图对象匹配,或者因为您想在数据空间中使用该标记,则可以自 贝塞尔路径多边形. 一个基本大小为1x1的标记,例如,将被缩放为 线条 何时 标记大小线宽 都是一样的,就像 校长 标记。

在这里,我们构造一个半径为六边形的多边形 1,然后我们可以通过设置来在数据坐标中平铺表面 markerspace=:数据. </无翻译>

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)))
651a7fd

贝塞尔路径标记

贝塞尔路径是矢量图形格式(如svg和pdf)的基础,由几个不同的操作组成,可以定义复杂的形状。

A 贝塞尔路径包含路径命令的向量,这些是 移动,移动, 利奈托, 弯曲,弯曲, 椭圆曲线[医近距离接触]. 填充的形状应该从 移动,移动并以结束 [医近距离接触].

注意未填充的标记(如单线或曲线)在CairoMakie中是可能的,但在GLMakie和Wglmakie中则不行,因为这些后端必须首先将标记作为填充形状呈现到纹理中。 如果无法渲染填充,则标记将不可见。 CairoMakie,另一方面可以毫无问题地中风这样的标记。

这是一个简单的箭头示例,该箭头以其尖端为中心,由路径元素构建。 </no-翻译>

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],
)
c74ef8a

路径可以有孔,只需用 移动,移动 这是主路径内。 如果外部是逆时针方向,则孔必须是顺时针方向,反之亦然。 例如,一个切出正方形的圆可以由一个 椭圆曲线 逆时针方向,顺时针方向的正方形: </无翻译>

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,
)
216b537

从svg路径字符串构建

您还可以从https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#path_commands[svg路径规范字符串]。 您可以使用关键字自动调整路径大小并翻转y轴和x轴(svgs通常有一个y向下增加的坐标系) 适合, 飞舞,飞舞,而 flipx的. 默认情况下,拟合路径的边界框是以零为中心的宽度为1的正方形。 你可以通过一个不同的边界 校长bbox的 关键字参数。 默认情况下,路径的方面保持不变,如果它与新的边界框不匹配,则路径居中,以便适合内部。 套装 keep_aspect=错误 将路径挤入边界框,而忽略其原始宽高比。

下面是一个包含bat符号的svg字符串的示例: </无翻译>

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)
7fea66e

多边形标记

人们也可以使用 几何学。波尔吉恩 作为标记。 多边形总是需要一个构成轮廓的点矢量。 它也可以采用点的矢量的可选矢量,每个点在轮廓形状中形成一个孔。

在这个例子中,一个小圆圈是从一个大圆圈中切出来的: </无翻译>

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),))
c3895d6

Vec营销商

您可以通过传递一个标记来分别缩放标记的x和y维度 维克. </无翻译>

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
e63c088

标记空间

默认情况下,标记大小以像素单位给出。 你可以通过调整来改变这一点 标记空间. 例如,您可以通过设置以数据单位缩放标记 markerspace=:数据. </无翻译>

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
7be7c49

机场位置示例

</无翻译>

using CairoMakie
using DelimitedFiles


a = readdlm(assetpath("airportlocations.csv"))

scatter(a[1:50:end, :], marker = '✈',
    markersize = 20, color = :black)
4be418c

处理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
83c7152

属性

阿尔法

默认值为 1.0

Colormap或color属性的alpha值。 多个阿尔法像在 图(alpha=0.2,颜色=(:红色,0.5),会成倍增加。

夹式飞机

默认值为 自动的

剪辑平面提供了一种在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
a633b1e

颜色表

默认值为 @继承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
a224f67

颜色变化

默认值为 自动的

表示的开始点和结束点的值 颜色表.

色阶;色阶

默认值为 身份认同

的颜色变换功能。 可以是任何函数,但只能与 颜色栏身份认同, 日志, 日志2, 日志10, sqrt,sqrt, 罗吉特, 麦琪伪科学10麦琪符号10.

周期

默认值为 [:颜色]

设置在创建多个绘图时循环哪些属性

depth_换档

默认值为 0.0

在所有其他变换之后(即在剪辑空间中)调整绘图的深度值,其中 0<=深度<=1. 这仅适用于GLMakie和WGLMakie,可用于调整渲染顺序(如可调谐透绘)。

脱脩脟茅脕麓陆脱

默认值为 错误

启用标记的深度排序,从而改善边界伪像。 目前仅支持GLMakie。

距离场

默认值为 什么都没有

可选的distancefield用于例如字体和贝塞尔路径渲染。 将自动设置。

字体

默认值为 @继承markerfont

设置用于字符标记的字体。 可以是一个 字符串 指定字体的(部分)名称或字体文件的文件路径

外汇管理局

默认值为 错误

调整绘图是否使用fxaa(抗锯齿,仅限GLMakie)渲染。

[医]发光色

默认值为 (:黑色,0.0)

设置标记周围发光效果的颜色。

[医]光宽度

默认值为 0.0

设置标记周围发光效果的大小。

[医]高

默认值为 自动的

Colorrange上方任何值的颜色。

可检查的

默认值为 @继承inspectable

设置此图是否应由 数据探测仪. 默认值取决于父场景的主题。

检查员-检查员

默认值为 自动的

设置回调函数 (检查员,情节)->。.. 用于清理DataInspector中的自定义指标。

检查员-检查员

默认值为 自动的

设置回调函数 (检查员,情节,索引)->。.. 它取代了默认值 显示_数据 方法。

检查器_label

默认值为 自动的

设置回调函数 (绘图、索引、位置)->字符串 它替换了DataInspector生成的默认标签。

低频,低频

默认值为 自动的

Colorrange以下任何值的颜色。

标记物

默认值为 @继承标记

设置散点标记。

marker_offset

默认值为 Vec3f(0)

标记从给定位置的偏移 标记空间 单位。 偏移量为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
bf8b10c

标记大小

默认值为 @继承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
96e90d6

标记空间

默认值为 :像素

设置在其中的空间 标记大小 是给出的。 见 麦琪空间() 对于可能的输入

模型

默认值为 自动的

为绘图设置模型矩阵。 这将复盖使用 翻译!, 旋转!规模!.

纳米色

默认值为 :透明

NaN值的颜色。

透支

默认值为 错误

控制绘图是否将绘制在其他绘图上。 这具体意味着忽略GL后端中的深度检查

轮调

默认值为 广告牌()

设置标记的旋转。 A 广告牌 旋转始终围绕深度轴。 </无翻译>

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
68672e0

空间

默认值为 :数据

设置包含情节的盒子的变换空间。 见 麦琪空间() 供可能的输入。

ssao

默认值为 错误

调整是否使用ssao(屏幕空间环境光遮蔽)渲染绘图。 请注意,这仅在3D绘图中有意义,并且仅适用于 fxaa=真.

[医]斯特罗克色

默认值为 @继承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
19a21a1

斯特罗克威德斯

默认值为 @继承markerstrokewidth

设置标记周围轮廓的宽度。 </无翻译>

using CairoMakie
fig = Figure()
kwargs = (; markersize = 30, strokecolor = :tomato)
scatter(fig[1, 1], 1:3; kwargs..., strokewidth = 3)
scatter(fig[1, 2], 1:3; kwargs..., strokewidth = [0, 3, 6])
fig
c0a86dc

变换器/变换器

默认值为 错误

控制模型矩阵(无平移)是否应用于标记本身,而不仅仅是位置。 (如果这是真的, 规模!旋转! 会影响标记物。

转型

默认值为 :自动

没有可用的文档。

透明度

默认值为 错误

调整情节处理透明度的方式。 在GLMakie 透明度=真 导致使用顺序独立的透明度。

uv_offset_width

默认值为 (0.0, 0.0, 0.0, 0.0)

没有可用的文档。

可见

默认值为 真的

控制是否渲染绘图。