2014-05-25 19 views
5

Julia'da bir arsa oluşturmaya çalışıyorum (şu anda Gadfly kullanıyor ancak farklı bir paket kullanmaya razıyım). Çok boyutlu bir dizim var.Julia, Gadfly'de katmanların bilinmeyen sayısını çiziyor

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

ama genel olarak ben nasıl sim1.value dizinin üçüncü boyutu bilmeyen bir arsa deyimi yazabilmek istiyorum: Sabit bir boyut boyut (örn 4875x3x3 için uygun bir arsa olacaktır. böyle bir açıklama yazabilirsiniz

belki gibi bir şey:?

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

ama bu işe yaramazsa

Ben dizi yeniden şekillendirilmesi ile bu sorunu çözmek başardı. Bir veri çerçevesine ve üçüncü boyutun ne olduğunu belirtmek için bir sütun ekledim, ancak bir veri çerçevesi oluşturmadan bunu yapmanın bir yolu olup olmadığını merak ediyorum.

Veriler şuna benzer: Doğru terim eğer

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

Denemediniz, ama "splatting" iş burada mı? p = Gadfly.plot ([katman (y = sim1.value [:, 1, i], x = [sim1.range], Geom.line, Tema (default_color = renk ("kırmızı"))) i için 1: size (sim1) [3]] ...) ' – rickhg12hs

+0

Splatting gerçekten işe yarıyor! Teşekkür ederim. Bunu bir cevap olarak gönderebilir ve seçebilirim. Bir renk dizisine sahip olmanın anlamında 'i' kullanmanın bir yolu var mı? – bdeonovic

+0

Başka bir seçenek 'add_plot_element' kullanmaktır, bkz. [Bu soru] (http://stackoverflow.com/questions/23585327/are-gadfly-plots-currently-composable). –

cevap

8

Anlaşılan "splatting", burada çalışıyor. Deneyin: Farklı katman renkler için

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

, bu sadece bir tahmin/kesmek (doğruluğundan düzenlemek için çekinmeyin) 'dir. Atsineği en Scale renk parametrelerinin

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

Belki kimse burada yardımcı olacaktır.

Zeyilname:

renk seçimi yöntemi için aşağıdaki ilk yoruma bakın.

+3

Renkler için uygun renk miktarını elde etmek için ayırt edici renkler (boyut (sim1) [3]) [i] 'kullanılır. – bdeonovic