Làm thế nào để tôi vẽ bề mặt của một âm mưu 4D?


11

Tôi đang cố gắng vẽ đồ thị hàm sóng cho một hạt trong hộp 3D. Điều này đòi hỏi tôi phải vẽ 4 biến: x, y, z và hàm mật độ xác suất.

Hàm mật độ xác suất là:

abs((np.sin((p*np.pi*X)/a))*(np.sin((q*np.pi*Y)/b))*(np.sin((r*np.pi*Z)/c)))**2

Tôi đang sử dụng np.arange()cho X, Y và Z.

Tôi đã đọc rằng để làm điều này, bạn cần vẽ sơ đồ bề mặt của một âm mưu 4D. Đây là những gì nó được cho là trông giống như:

nhập mô tả hình ảnh ở đây


3
Làm thế nào về việc sử dụng một màu sắc để đại diện cho mật độ xác suất?
Shuhao Cao

Tôi sẽ tưởng tượng opacity sẽ hoạt động tốt cho loại cốt truyện này. Bạn có thể cần cung cấp các quan điểm khác nhau của từng ô, nhưng làm cho cốt truyện trở nên mờ hơn trong đó hạt có khả năng sẽ hình dung tốt dữ liệu này.
Godric Seer

2
Vì có vẻ như bạn đang sử dụng numpy, bạn có thể sử dụng mayavi để thực hiện âm mưu thực tế. Các tài liệu có một ví dụ về vẽ đồ thị vô hướng trong 3D .
jorgeca

Câu trả lời:


13

f(x,y,z)

Có một số cách để hình dung loại dữ liệu này và nhiều công cụ sẽ giúp bạn. Tôi sẽ chỉ cho bạn một vài kiểu cốt truyện bạn có thể thực hiện.

  1. f(x,y,z)=(const.)

    Trong Mathicala,

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2 == 1/2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]
    

    Hiển thị các bề mặt của xác suất không đổi 0,2, 0,5 và 0,8:

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Contours -> {0.2, 0.5, 0.8}, 
     ContourStyle -> (Directive[#, Opacity[0.25]] & /@ {Yellow, Orange, Red}), 
     Lighting -> "Neutral", Mesh -> None]
    

  2. Bạn có thể thực hiện một số loại trực quan hóa âm lượng , có thể với các phần cắt và cắt. Bạn sẽ có thể chỉ định màu sắc và độ mờ cho từng điểm trong 3D. Các công cụ nâng cao hơn cũng sẽ cho phép bạn chọn chức năng chuyển.

    imgdata = 
      Table[Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2, 
        {x, -1., 1, .01}, {y, -1., 1, .01}, {z, -1., 1, .01}];
    
    img = Image3D[imgdata, ClipRange -> {{150, 200}, {0, 100}, {0, 200}}]
    

    Cắt lát thường giúp ích, đặc biệt là nếu bạn có thể tương tác kiểm soát lát nào sẽ hiển thị.

    Image3DSlices[img, Range[1, 200, 10]]
    

Những ví dụ này có ý nghĩa như là ý tưởng cho loại hình trực quan nào bạn có thể cố gắng tạo. Có nhiều công cụ thương mại và miễn phí khác nhau mà bạn có thể sử dụng để thực hiện các âm mưu.


9

Phương pháp truyền thống cho dữ liệu dựa trên trường vô hướng (nhiệt độ, cường độ vận tốc, áp suất, mật độ, v.v.) được vẽ trên hai hoặc ba kích thước không gian sử dụng màu sắc. Điều quan trọng cần lưu ý là việc lựa chọn bảng màu có thể làm sai lệch ấn tượng của bạn về dữ liệu. Vì lý do này, không sử dụng bảng màu cầu vồng. (Để biết tại sao, hãy xem ở đây , ở đây , ở đâyở đây .) Thật không may, cầu vồng là bảng màu mặc định trong MATLAB và matplotlib.

Nếu bạn đang cố gắng làm nổi bật các thay đổi về cường độ, sử dụng lược đồ thay đổi độ bão hòa sẽ hoạt động tốt, giống như một lược đồ có màu từ trắng (mật độ không) đến đen (mật độ tối đa). Minh bạch cũng có thể hoạt động tốt. Một vấn đề khó khăn với các ô 3 chiều khi sử dụng màu sắc là bạn sẽ cần xem dữ liệu từ nhiều góc độ để có được bức tranh đầy đủ hơn về xu hướng và tính năng; bạn cũng có thể cần phải vẽ các lát.


Vâng, một âm mưu màu sẽ không làm, bạn đúng. Bất cứ ý tưởng nào tôi sẽ sử dụng loại chức năng cho việc này sau đó?
củ cải

2
Bạn có nghĩa là một chức năng trong Python? Có một vài thư viện ngoài kia hoạt động tốt cho âm mưu. Matplotlib thường được sử dụng cho các ô 2D chứ không phải các ô 3D; ggplot và Bokeh có trường hợp sử dụng tương tự. Mayavi2, như jorgeca đề xuất, là tốt cho âm mưu 3D. Tôi có xu hướng thích các gói phần mềm để trực quan hóa dữ liệu 3D, như ParaView hoặc VisIt. Bạn cũng có thể xem yt (dựa trên Python) và thực hiện tốt việc vẽ đồ thị 3D. Bất kỳ thư viện trực quan đáng giá nào cũng sẽ cung cấp cho bạn nhiều tùy chọn về thang màu, độ mờ, độ bão hòa, v.v.
Geoff Oxberry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.