2016-06-24 17 views
7

Ich bin ein Streudiagramm erstellen, die etwa wie folgt aussieht:Feinkörnige Kontrolle über die Auftragreihenfolge in Gadfly?

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

Ich mag die von vorne eingezeichneten Punkten [:d, :b, :c, :a] so dass die größere Anzahl von Punkten in :a ist in der Rückseite in dieser Reihenfolge zurück. Also, warum muss ich die Reihenfolge angeben als levels=[:b, :c, :d, :a] bekomme mein gewünschtes Ergebnis. Was ist die Diskrepanz hier?

enter image description here

Auch interessant scheint es, als ob die Reihenfolge abhängt, welche Farben verwendet werden !? wie das Ausprobieren verschiedener Farben von ColorBrewer zu verschiedenen Ordnungsergebnissen führt, was wohl ein Bug ist. Relevantes Thema: https://github.com/dcjones/Gadfly.jl/issues/858

Antwort

1

FWIW, ich habe es aufgegeben zu kontrollieren, welche Layer überschreiben welche Layer bei der Verwendung von Gadfly überschreiben.

Vielleicht ist es sogar ziemlich schwierig zu tun, weil manchmal mein exakt gleicher Code, zweimal ausgeführt, zwei leicht unterschiedliche Zahlen erzeugt, in denen die Reihenfolge, in der eine Ebene eine andere Ebene überschreibt, scheinbar zufällig geändert wurde. Dies geschieht zumindest, wenn ich die Ausgabe-Figur über Gadfly.draw(PS(file, size...), p) an eine Postscript-Datei sende, was ich normalerweise tue.

Natürlich kann dies in Zukunft verbessern. Ich benutze derzeit Gadfly 0.5.2 in Julia 0.5.0 unter Windows 10, 64 Bit.

Verwandte Themen