我正在创建一个看起来像这样的散点图:
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]
才能得到我想要的结果。这里的差异是什么?
另外,有趣的是,好像订单取决于使用的颜色!?尝试ColorBrewer
的不同颜色导致不同的排序结果,这可能是一个错误。相关问题:https://github.com/dcjones/Gadfly.jl/issues/858
答案 0 :(得分:1)
FWIW,我已经放弃了在使用Gadfly时完全控制哪些图层覆盖了哪些图层。
也许它甚至很难做到,因为有时我的完全相同的代码,运行两次,产生两个略有不同的数字,其中一个图层覆盖另一个图层的顺序已经发生了变化,显然是随机的。至少当我通过Gadfly.draw(PS(file, size...), p)
将输出数据发送到postscript文件时会发生这种情况,这就是我通常所做的事情。
当然,未来可能会有所改善。我目前在Windows 10,64位的Julia 0.5.0中使用Gadfly 0.5.2。