【问题标题】:Makie: Non-overlapping label placement algorithm for scatter plotsMakie:散点图的非重叠标签放置算法
【发布时间】:2022-10-08 16:37:03
【问题描述】:

我正在使用 CairoMakie 散点图 XY 数据集,但使用标签作为标记:

using CairoMakie


x = [0, 0.5, 0.50]
y = [0, 0.5, 0.51]
lbls = ["O", "A", "B"]

fig = Figure()
ax = Axis(fig[1,1])
scatter!(ax, x, y, marker=:circle, markersize=10, color=:red)
foreach(i -> text!(ax, position=(x[i], y[i]), lbls[i]), 1:3)

display(fig)

这将产生下图:

因为点AB 彼此非常接近,所以它们各自的标签重叠。 CairoMakie 是否有一种算法来放置标签以避免标签重叠?

我知道 Gadfly 具有 Geom.label 的此功能,但我希望我不必使用单独的包来绘制此类图表。我也知道在 CairoMakie,我可以使用诸如 positionoffset 之类的参数来调整标签位置,使标签不重叠,但我不能对我的每个数据集都这样做。

任何人都可以帮忙吗?或者也许有一个用 Julia 编写的标签放置算法?谢谢。

【问题讨论】:

    标签: julia scatter-plot makie.jl


    【解决方案1】:

    由于您要单独设置标签字母 O、A、B,我也会考虑使用自定义偏移量:

    using CairoMakie
    
    
    x = [0, 0.5, 0.50]
    y = [0, 0.5, 0.51]
    lbls = ["O", "A", "B"]
    xoffset = [0, -0.015, 0.005]
    yoffset = [0, -0.02, 0]
    
    fig = Figure()
    ax = Axis(fig[1,1])
    scatter!(ax, x, y, marker=:circle, markersize=10, color=:red)
    foreach(i -> text!(ax, position=(x[i] + xoffset[i], y[i] + yoffset[i]), lbls[i]), 1:3)
    
    fig
    

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      相关资源
      最近更新 更多