对Gadfly绘图顺序的细粒度控制?

时间:2016-06-24 18:40:32

标签: julia

我正在创建一个看起来像这样的散点图:

using DataFrames
using Gadfly
using ColorBrewer
using Distributions
colors = palette("Set1", 4)
df1 = DataFrame(rand(Normal(0, 0.5), 1000,2))
df1[:x3] = :a
df2 = DataFrame(rand(Normal(-0.25, 0.25), 500,2))
df2[:x3] = :b
df3 = DataFrame(rand(Normal(0.25, 0.25), 500,2))
df3[:x3] = :c
df4 = DataFrame(rand(Normal(0, 0.25), 500,2))
df4[:x3] = :d
df = vcat(df1, df2, df3, df4)
plot(df, x=:x1, y=:x2, color=:x3, Geom.point, Scale.color_discrete_manual(colors..., levels=[:b, :c, :d, :a]),
Theme(highlight_width=0pt))

我希望按此顺序[:d, :b, :c, :a]从前到后绘制点,以便:a中的更多点位于后面。那么为什么我必须指定顺序为levels=[:b, :c, :d, :a]才能得到我想要的结果。这里的差异是什么?

enter image description here

另外,有趣的是,好像订单取决于使用的颜色!?尝试ColorBrewer的不同颜色导致不同的排序结果,这可能是一个错误。相关问题:https://github.com/dcjones/Gadfly.jl/issues/858

1 个答案:

答案 0 :(得分:1)

FWIW,我已经放弃了在使用Gadfly时完全控制哪些图层覆盖了哪些图层。

也许它甚至很难做到,因为有时我的完全相同的代码,运行两次,产生两个略有不同的数字,其中一个图层覆盖另一个图层的顺序已经发生了变化,显然是随机的。至少当我通过Gadfly.draw(PS(file, size...), p)将输出数据发送到postscript文件时会发生这种情况,这就是我通常所做的事情。

当然,未来可能会有所改善。我目前在Windows 10,64位的Julia 0.5.0中使用Gadfly 0.5.2。