โครงร่าง 2D ใน python โดยใช้ตัวแปร 1D X, Y และ Z

Aug 15 2020

ให้ฉันเริ่มต้นการสืบค้นนี้โดยยอมรับว่าฉันยังใหม่กับ Python มาก ฉันต้องการสร้างโครงร่างของข้อมูลใน Python เพื่อทำให้กระบวนการเป็นไปโดยอัตโนมัติซึ่งสามารถทำได้อย่างง่ายดายโดยใช้ Surfer ฉันมีไฟล์ข้อมูลดังกล่าวกว่า 1,000 ไฟล์และการสร้างด้วยตนเองอาจเป็นเรื่องที่น่าเบื่อมาก ข้อมูลที่ฉันใช้มีลักษณะดังนี้ซึ่งเป็นดาต้าเฟรมที่มีส่วนหัว 0, 1 และ 2 และ 1,2, .. 279 เป็นดัชนี:

     0   1         2
0     3  -1 -0.010700
1     4  -1  0.040100
2     5  -1  0.061000
3     6  -1  0.052000
4     7  -1  0.013100
..   ..  ..       ...
275  30  -9 -1.530100
276  31  -9 -1.362300
277  32  -9 -1.190200
278  33  -9 -1.083600
279  30 -10 -1.864600

[280 rows x 3 columns]

ที่นี่

x=data[0]
y=data[1]
z=data[2]

เนื่องจากฟังก์ชัน contour pf matplotlib ต้องการให้ z เป็นอาร์เรย์ 2D นี่คือจุดเริ่มต้นของความสับสน ตามวิธีแก้ปัญหาหลาย ๆ คำสั่งของ stackoverflow ฉันทำสิ่งต่อไปนี้:

import numpy as np
x=np.array(x)
y=np.array(y)
z=np.array(z)
X, Y = np.meshgrid(x, y)
import scipy.interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
Z=rbf(X,Y)

lmin=data[2].min()
lmax=data[2].max()
progn=(lmax-lmin)/20
limit=np.arange(lmin,lmax,progn)

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.contour(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()

ด้วยรหัสข้างต้นพล็อตนี้ได้มา

อย่างไรก็ตามไม่เป็นที่ต้องการและหากสามารถมองผ่านเส้นเสียงรบกวนของพื้นผิวได้ก็จะมีเส้นชั้นความสูงที่เรียงลำดับอยู่ด้านล่างซึ่งเป็นที่ต้องการตามที่เห็นจากโครงร่างที่สร้างโดยนักท่องที่นี่

ฉันต้องการย้ำว่าข้อมูลเดียวกันนี้ถูกใช้ในการสร้างพล็อตนักท่อง

ความช่วยเหลือใด ๆ ในการสร้างพล็อตที่ต้องการจะได้รับการชื่นชมอย่างมาก

คำตอบ

ChandanDey Oct 07 2020 at 18:34

ขอบคุณ @JohanC สำหรับคำตอบ ฉันต้องการให้คำแนะนำของเขาเป็นมุมมองกับคำถามของฉัน

ax.contourแทนที่ด้วยการax.tricontourแก้สถานการณ์ของฉัน และax.tricontourfได้รับการเติมรูปร่างเสร็จสิ้น ดังนั้นส่วนสุดท้ายของรหัสของฉันจะเป็น:

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.tricontour(X,Y,Z,limit) 
ax.tricontourf(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()