2016-04-30 15 views
3

Ich versuche, die folgende Handlung in Julia mit Gadfly zu erstellen:tick Einstellung mit logarithmischer Skala Abstand in Gadfly

Example plot http://oak.snr.missouri.edu/silviculture/tools/density.png

Ich habe einig vorhandenen R-Code, der für diesen als Teil eines eine leere Basis schafft größere Plotting-Funktion mit Matplot mit dem Parm log = 'xy' was zu korrekt verteilten Ticks führt.

...matplot(tpa, qmd, ylab = "Quadratic Mean Diameter", 
xlab = "Trees per acre", type = "n", 
log = "xy", xlim = c(1,1200), 
ylim = c(1, 40),main ="")... 

Julia Der Code I haben derzeit ist

Using Gadfly 
plot(x=[1],y=[1], 
Scale.x_log, Scale.y_log, 
Scale.x_continuous(minvalue=1,maxvalue=1200), 
Scale.y_continuous(minvalue=1,maxvalue=40), 
Guide.xticks(ticks=[1,5,10,50,100,500,1000]), 
Guide.YTicks(ticks=[1,2,5,10,20]), 
Guide.XLabel("Trees per acre"), Guide.YLabel("Quadratic Mean Diameter"), 
Theme(grid_color=colorant"black"), 
Geom.point) 

die die Zecken zu den richtigen Werten erzeugt, aber der Abstand ist, aus in den unteren Werten resultierende aufeinander kondensiert wird. Ich habe versucht, das Scale.x_log zu ändern und das Argument nach dem kontinuierlichen Argument zu verschieben, aber ich kann die gewünschten Achsen aus dem Beispieldiagramm nicht neu erstellen.

Irgendwelche Ratschläge, wie ich die logarithmischen Achsenparameter anpassen kann, um die obige Grafik zu erstellen?

Wäre dies einfacher mit einer anderen Grafikbibliothek dafür? Ich wähle Gadfly, da ich mit der ggplot-Syntax vertrauter bin, aber ich habe in meinem googling immer wieder plots() und die Pyplot() -Pakete gesehen.

EDIT/ARBEITSCode:

Ich habe es funktioniert, war der Knackpunkt das Protokoll der gewünschten Haltepunkte passieren. Vielen Dank an Felipe für die Lambda-Funktion, mir war nicht bekannt, wie diese funktionierte.

myxticks=log([1,5,10,50,100,500,1000]) 
myyticks=log([1,2,5,10,20]) 

plot(x=[1], y=[1], 
Geom.point, 
Scale.x_log(labels=d-> @sprintf("%d",e^d)), 
Scale.y_log(labels=d-> @sprintf("%d",e^d)), 
Guide.xticks(ticks=myxticks), 
Guide.yticks(ticks=myyticks) 
) 
+0

Noch kein Glück in Julia, aber ich habe eine ggplot Version in R Arbeits Der Abstand wurde voreingestellt, nachdem ich die Pausen hinzugefügt und die Achsenskalierung geändert hatte. ggplot (x = 5, y = 5) + geom_blank() + scale_x_log10 (Grenzen = c (1,1200), c = Pausen (1,5,10,50,100,500,1000)) + scale_y_log10 (Grenzwerte = c (1,40), Brüche = c (1,5,10,20,40)) – Casey

Antwort

1

Sie sollten Scale.x_logstatt von Scale.x_continuous verwenden. Wenn Sie the source sehen, können Sie der einzige Unterschied zwischen diesen beiden sehen, ist die Transformationsfunktion *

*:. Ich nenne es würde Übersetzung Funktion, aber hey, das ist mir einfach.

EDIT:

So ist die oben nicht ganz tun es für den Abstand, die ein wenig mehr Hin- und Herschalten zwischen log und exp erfordert. Folgendes sollte man als Skelett helfen, wenn Sie mit den Parametern spielen müssen werden bekommen, was Sie wollen:

using Gadfly 
pts=collect(1:20) 
theticks=collect(log(linspace(1,20,10))) 
plot(x=pts, y=pts, 
    Geom.point, Scale.x_log(labels=d-> @sprintf("%d",e^d)), 
    Guide.xticks(ticks=theticks)) 

enter image description here

+0

Das Ändern von Scale.x_continuous in Scale.x_log scheint meine Tick-Werte einfach durch einen Exponenten (1,5, ... werden 10^1,10^5 ...) ohne den Abstand zwischen den Zeilen zu ändern. – Casey