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

tln*_*agy 6 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))
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

Fel*_*nez 1

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

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

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