2014-05-25 28 views
5

Tôi đang cố gắng tạo một cốt truyện ở Julia (hiện đang sử dụng Gadfly nhưng tôi sẵn lòng sử dụng một gói khác). Tôi có một mảng đa chiều. Đối với một kích thước chiều cố định (ví dụ 4875x3x3 một cốt truyện phù hợp sẽ là:Julia vẽ số lượng lớp không xác định trong 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"))) 
) 

nhưng nói chung tôi muốn để có thể viết một tuyên bố âm mưu mà tôi không biết chiều thứ ba của mảng sim1.value thế nào. tôi có thể viết một tuyên bố như vậy

có lẽ cái gì đó như:

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

nhưng điều này không làm việc

tôi đã có thể giải quyết vấn đề này bằng cách định hình lại mảng. vào một khung dữ liệu và thêm một cột để chỉ ra kích thước thứ ba là gì, nhưng tôi đã tự hỏi liệu có cách nào để làm điều này mà không cần tạo một khung dữ liệu không.

dữ liệu giống như thế này:

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

Chưa thử, nhưng việc "chia nhỏ" có hoạt động ở đây không? 'p = Gadfly.plot ([lớp (y = sim1.value [:, 1, i], x = [sim1.range], Geom.line, Chủ đề (default_color = color (" red "))) cho i in 1: size (sim1) [3]] ...) ' – rickhg12hs

+0

Hoạt động chia sẻ thực sự hoạt động! Cảm ơn bạn. Bạn có thể đăng nó như một câu trả lời và tôi có thể chọn nó. Có cách nào để sử dụng 'i' trong hiểu để có một chuỗi các màu sắc? – bdeonovic

+0

Một tùy chọn khác là sử dụng 'add_plot_element', xem [câu hỏi này] (http://stackoverflow.com/questions/23585327/are-gadfly-plots-currently-composable). –

Trả lời

8

Rõ ràng "splatting", nếu đó là thuật ngữ chính xác, làm việc ở đây. Hãy thử:

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

Đối với các màu lớp khác nhau, đây chỉ là phỏng đoán/hack (vui lòng chỉnh sửa cho đúng).

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

Có lẽ một trong các thông số màu của Gadfly là Scale sẽ giúp ích ở đây.

Phụ Lục:

Xem bình luận đầu tiên dưới đây để biết phương pháp lựa chọn màu sắc.

+3

Đối với các màu tôi đã sử dụng 'distinctable_colors (size (sim1) [3]) [i]' để có được lượng màu thích hợp. – bdeonovic

Các vấn đề liên quan