ฉันจะพล็อตพื้นผิวของพล็อต 4D ได้อย่างไร


11

ฉันพยายามพล็อตฟังก์ชั่นคลื่นสำหรับอนุภาคในกล่อง 3 มิติ ฉันต้องการพล็อต 4 ตัวแปร: x, y, z แกนและฟังก์ชันความหนาแน่นของความน่าจะเป็น

ฟังก์ชันความหนาแน่นของความน่าจะเป็นคือ:

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

ฉันใช้np.arange()สำหรับ X, Y และ Z

ฉันได้อ่านสิ่งนี้แล้วคุณต้องพล็อตผิวของพล็อต 4D นี่คือสิ่งที่ควรจะเป็น:

ป้อนคำอธิบายรูปภาพที่นี่


3
วิธีการเกี่ยวกับการใช้สีเพื่อแสดงความหนาแน่นของความน่าจะเป็น?
Shuhao Cao

ฉันคิดว่าความทึบจะทำงานได้ดีสำหรับพล็อตประเภทนี้ คุณอาจจำเป็นต้องจัดเตรียมมุมมองที่แตกต่างกันของแต่ละพล็อต แต่ทำให้พล็อตทึบแสงมากขึ้นซึ่งอนุภาคมีแนวโน้มที่จะมองเห็นข้อมูลนี้ได้ดี
Godric Seer

2
เนื่องจากดูเหมือนว่าคุณกำลังใช้ numpy คุณสามารถใช้mayaviเพื่อทำการพล็อตจริง เอกสารมีตัวอย่างของการวางแผนข้อมูลเกลาในแบบ 3 มิติ
jorgeca

คำตอบ:


13

f(x,y,z)

มีหลายวิธีในการมองเห็นข้อมูลประเภทนี้และเครื่องมือมากมายที่จะช่วยคุณ ฉันจะแสดงรูปแบบการแปลงบางแบบที่คุณสามารถทำได้

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

    ใน Mathematica

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

    แสดงพื้นผิวของความน่าจะเป็นคงที่ 0.2, 0.5 และ 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. คุณสามารถสร้างภาพข้อมูลเสียงได้บางประเภทโดยอาจมีรอยตัดและการแบ่งส่วน คุณจะสามารถกำหนดสีและความทึบของแต่ละจุดในแบบ 3 มิติ เครื่องมือขั้นสูงเพิ่มเติมจะช่วยให้คุณเลือกฟังก์ชั่นการถ่ายโอน

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

    การแบ่งส่วนบ่อย ๆ ช่วยได้โดยเฉพาะถ้าคุณสามารถควบคุมส่วนที่จะแสดงในแบบโต้ตอบได้

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

ตัวอย่างเหล่านี้มีไว้เพื่อเป็นแนวคิดสำหรับการสร้างภาพข้อมูลประเภทใดที่คุณสามารถลองสร้างได้ มีเครื่องมือฟรีและเชิงพาณิชย์มากมายที่คุณสามารถใช้ในการแปลง


9

วิธีการดั้งเดิมสำหรับข้อมูลที่ใช้ฟิลด์สเกลาร์ (อุณหภูมิ, ขนาดความเร็ว, ความดัน, ความหนาแน่น ฯลฯ ) ที่ถูกพล็อตในมิติพื้นที่สองหรือสามมิติใช้สี สิ่งสำคัญคือต้องทราบว่าตัวเลือกชุดรูปแบบสีสามารถบิดเบือนการแสดงผลข้อมูลของคุณได้ ด้วยเหตุนี้อย่าใช้โทนสีรุ้ง (สำหรับเหตุผลที่เห็นนี่ , ที่นี่ , ที่นี่และที่นี่ .) แต่น่าเสียดายที่รุ้งเป็นโทนสีที่เริ่มต้นใน MATLAB และ matplotlib

หากคุณพยายามเน้นการเปลี่ยนแปลงของความเข้มการใช้ชุดรูปแบบที่เปลี่ยนแปลงในความอิ่มตัวใช้งานได้ดีเช่นช่วงที่มีตั้งแต่สีขาว (ความหนาแน่นเป็นศูนย์) ถึงสีดำ (ความหนาแน่นสูงสุด) ความโปร่งใสสามารถทำงานได้ดี ปัญหาที่ยุ่งยากของพล็อต 3 มิติเมื่อใช้สีคือคุณต้องดูข้อมูลจากหลายมุมมองเพื่อให้ได้ภาพรวมของแนวโน้มและฟีเจอร์ที่สมบูรณ์ยิ่งขึ้น คุณอาจต้องพล็อตชิ้น


ใช่พล็อตสีจะไม่ทำคุณพูดถูก มีความคิดใดที่ฉันจะใช้ฟังก์ชั่นประเภทนี้?
หัวผักกาด

2
คุณหมายถึงฟังก์ชั่นใน Python หรือไม่? มีห้องสมุดไม่กี่แห่งที่ทำงานได้ดีสำหรับการวางแผน Matplotlib มักจะใช้สำหรับแปลง 2D มากกว่าแปลง 3 มิติ; ggplot และ Bokeh มีกรณีการใช้งานที่คล้ายกัน Mayavi2 ตามที่ jorgeca แนะนำนั้นดีสำหรับการวางแผน 3 มิติ ฉันมักจะชอบแพ็คเกจซอฟต์แวร์สำหรับการสร้างภาพข้อมูล 3D เช่น ParaView หรือ VisIt คุณยังสามารถดู yt (ซึ่งใช้ Python) และทำงานได้ดีในการวางแผนข้อมูล 3D ไลบรารีการสร้างภาพที่มีคุณค่าควรมีตัวเลือกมากมายสำหรับเครื่องชั่งสี, ความทึบ, ความอิ่มตัว ฯลฯ
Geoff Oxberry
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.