2014-05-25 13 views
5

Próbuję stworzyć spisek w Julii (obecnie używa Gadfly, ale byłbym skłonny użyć innej paczki). Mam wielowymiarową tablicę. Dla wielkości stałe wymiary (np 4875x3x3 odpowiednia fabuła będzie:Julia spiskuje nieznaną liczbę warstw w 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"))) 
) 

ale w ogóle chcę, aby móc napisać oświadczenie działki gdzie nie wiem trzeci wymiar sim1.value tablicy Jak. mogę napisać takie oświadczenie

może coś takiego:

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

ale to nie działa

udało mi się rozwiązać ten problem poprzez przekształcanie tablicę. do ramki danych i dodając kolumnę do wskazania trzeciego wymiaru, ale zastanawiałem się, czy istnieje sposób, aby to zrobić bez tworzenia ramki danych.

Dane wyglądać tak:

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

Nie próbowałem, ale czy "splatting" działa tutaj? '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]] ...) ' – rickhg12hs

+0

Splatting rzeczywiście działa! Dziękuję Ci. Możesz opublikować go jako odpowiedź i mogę go wybrać. Czy istnieje sposób użycia "i" w zrozumieniu do uzyskania sekwencji kolorów? – bdeonovic

+0

Inną opcją jest użycie 'add_plot_element', zobacz [to pytanie] (http://stackoverflow.com/questions/23585327/are-gadfly-plots-currently-composable). –

Odpowiedz

8

Podobno "splatting", jeśli jest to właściwe określenie, pracuje tutaj. Wypróbuj:

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

Dla różnych kolorów warstw, jest to tylko zgadywanie/hack (prosimy o edycję dla poprawności).

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

Być może jednym z Scale parametrów barwy Gadfly pomogłoby tutaj.

Uzupełnienie:

Zobacz pierwszy komentarz poniżej dla sposobu wyboru kolorów.

+3

Dla kolorów użyłem 'odróżnialnych_ kolorów (rozmiar (sim1) [3]) [i]', aby uzyskać odpowiednią ilość kolorów. – bdeonovic