2014-05-25 3 views
5

Ich versuche, ein Grundstück in Julia zu schaffen (zur Zeit mit Gadfly aber ich wäre bereit, ein anderes Paket zu verwenden). Ich habe ein mehrdimensionales Array. Für eine feste Dimension Größe (zB 4875x3x3 ein geeignetes Grundstück wäre:Julia Plotten unbekannte Anzahl von Schichten in Gadfly

p=Gadfly.plot( 
    layer(y=sim1.value[:,1,1],x=[sim1.range],Geom.line, Theme(default_color=color("red"))), 
    layer(y=sim1.value[:,1,2],x=[sim1.range],Geom.line, Theme(default_color=color("blue"))), 
    layer(y=sim1.value[:,1,3],x=[sim1.range],Geom.line, Theme(default_color=color("green"))) 
) 

aber im Allgemeinen möchte ich in der Lage sein, eine Handlung Erklärung zu schreiben, in dem ich nicht die dritte Dimension des sim1.value Array weiß, wie. kann ich eine solche Aussage schreiben

vielleicht so etwas wie:

p=Gadfly.plot([layer(y=sim1.value[:,1,i],x=[sim1.range], Geom.line, Theme(default_color=color("red"))) for i in 1:size(sim1)[3]]) 

aber das funktioniert nicht

konnte ich dieses Problem lösen, indem das Array Umformung. in einen Datenrahmen und das Hinzufügen einer Spalte, um anzuzeigen, was die dritte Dimension, aber ich frage mich, ob es einen Weg, dies zu tun, ohne einen Datenrahmen zu schaffen.

Daten in etwa so aussehen:

julia> sim1.value 
4875x3x3 Array{Float64,3}: 
[:, :, 1] = 
    0.201974 0.881742 0.497407 
    0.0751914 0.921308 0.732588 
-0.109084 1.06304 1.15962 
-0.0149133 0.896267 1.22897 
    0.717094 0.72558 0.456043 
    0.971697 0.792255 0.40328 
    0.971697 0.792255 0.227884 
-0.600564 1.23815 0.499631 
-0.881391 1.07994 0.59905 
-0.530923 1.00278 0.447363 
    ⋮        
    0.866138 0.657875 0.280823 
    1.00881 0.594015 0.894645 
    0.470741 0.859117 1.09108 
    0.919887 0.540488 1.01126 
    2.22095 0.194968 0.954895 
    2.5013  0.202698 2.05665 
    1.94958 0.257192 2.01836 
    2.24015 0.209885 1.67657 
    0.76246 0.739945 2.2389 
    0.673887 0.640661 2.15134 

[:, :, 2] = 
    1.28742 0.760712 1.61112 
    2.21436 0.229947 1.87528 
-1.66456 1.46374 1.94794 
-2.4864 1.84093 2.34668 
-2.79278 1.61191 2.22896 
-1.46289 1.21712 1.96906 
-0.580682 1.3222 1.45223 
    0.17112 1.20572 0.74517 
    0.734113 0.629927 1.43462 
    1.29676 0.266065 1.52497 
    ⋮       
    1.2871 0.595874 0.195617 
    1.84438 0.383567 1.15537 
    2.12446 0.520074 0.957211 
    2.36307 0.222486 0.402168 
    2.43727 0.19843 0.636037 
    2.33525 0.302378 0.811371 
    1.09497 0.605816 0.297978 
    1.366  0.56246 0.343701 
    1.366  0.56246 0.219561 
    1.35889 0.630971 0.281955 

[:, :, 3] = 
    0.649675 0.899028 0.628103 
    0.718837 0.665043 0.153844 
    0.914646 0.807048 0.207743 
    0.612839 0.790611 0.293676 
    0.759457 0.758115 0.280334 
    0.77993 0.774677 0.396879 
-1.63825 1.38275 0.85772 
-1.43517 1.45871 0.835853 
-1.15413 1.35757 1.05071 
-1.10967 1.37525 0.685986 
    ⋮       
    1.15299 0.561492 0.680718 
    1.14853 0.629728 0.294947 
    1.65147 0.517422 0.22285 
    1.65147 0.517422 0.517451 
    1.78835 0.719658 0.745866 
    2.36554 0.426616 1.49432 
    0.855502 0.739237 1.24224 
-0.175234 0.701025 1.07798 
-0.221313 0.939255 1.3463 
    1.58094 0.368615 1.63817 
+3

habe es nicht ausprobiert, aber tut „splatting“ Arbeit hier? 'P = Gadfly.plot ([Schicht (y = sim1.value [:, 1, i] = x [sim1.range], Geom.line, Theme (default_color = Farbe ("red"))) für i in 1: Größe (sim1) [3]] ...) ' – rickhg12hs

+0

Splatting funktioniert tatsächlich! Vielen Dank. Sie können es als Antwort posten und ich kann es auswählen. Gibt es eine Möglichkeit, 'i' im Verständnis zu verwenden, um eine Abfolge von Farben zu haben? – bdeonovic

+0

Eine weitere Option ist 'add_plot_element' zu verwenden, finden Sie [diese Frage] (http://stackoverflow.com/questions/23585327/are-gadfly-plots-currently-composable). –

Antwort

8

Anscheinend "splatting", wenn das der richtige Begriff ist, arbeitet hier. Versuchen Sie:

p=Gadfly.plot([layer(y=sim1.value[:,1,i],x=[sim1.range], Geom.line, Theme(default_color=color("red"))) for i in 1:size(sim1)[3]]...) 

Für verschiedene Layer-Farben ist dies nur eine Vermutung/Hack (fühlen Sie sich frei, für die Richtigkeit zu bearbeiten).

p=Gadfly.plot([layer(y=sim1.value[:,1,i],x=[sim1.range], Geom.line, Theme(default_color=color(["red" "blue" "green" "cyan" "magenta" "yellow"][i%6+1]))) for i in 1:size(sim1)[3]]...) 

Vielleicht ist einer der Scale Farbparameter des Gadfly würde hier helfen.

Nachtrag:

Siehe ersten Kommentar unten für die Farbauswahlmethode.

+3

Für Farben verwendet I 'distinguishable_colors (Größe (sim1) [3]) [i]' die entsprechende Menge an Farben zu erhalten. – bdeonovic