พล็อตพื้นผิวจากรูปภาพที่มีค่าเกณฑ์

Aug 19 2020

ฉันต้องการสร้างพล็อตพื้นผิวจากอาร์เรย์สองมิติซึ่งเก็บค่า z ไว้ (คล้ายกับรูปภาพที่กำหนดค่าพิกเซล)

ข้อมูลของฉันคืออาร์เรย์ 512x512 เช่น:

Z
Out[85]: 
array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])

ค่าที่สนใจจะอยู่ตรงกลางของภาพ

ภาพที่จะต้องพล็อตเฉพาะพื้นที่วงกลมกลางเป็นพล็อตพื้นผิว

ฉันทำพล็อตพื้นผิวด้วย:

X = np.arange(1, 513)
Y = np.arange(1, 513)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, vmin=0.01)
plt.show()

ผลลัพธ์คือ:

ภาพที่ได้โดยไม่มีการปิดบังหรือขีด จำกัด ใด ๆ

นอกเหนือจากรูปแบบที่ไม่ดีฉันต้องการพล็อตพื้นที่ส่วนกลางแบบวงกลมเท่านั้นและไม่ได้พล็อตพื้นที่สี่เหลี่ยมจัตุรัสด้านนอกซึ่งค่าทั้งหมดเป็นศูนย์

ฉันจะกำหนดเกณฑ์หรือหน้ากากให้กับค่าได้อย่างไร หรือมีแนวทางที่ดีกว่านี้มากหรือไม่? ฉันขอขอบคุณตัวอย่างมากเนื่องจากฉันยังใหม่กับ python / numpy ect

ขอบคุณมาก!

คำตอบ

2 P.Leibner Aug 19 2020 at 15:11

วิธีหนึ่งในการยับยั้งการพล็อตศูนย์ในพื้นผิวของคุณคือการแทนที่ศูนย์ (หรือค่าทั้งหมดที่คุณไม่ต้องการลงจุด) ใน Z-Array ของคุณด้วย nans เช่นนี้:

Z[Z==0]=np.nan

สิ่งนี้จะทำให้คุณได้พล็อตที่คุณต้องการ