1D X, Y ve Z değişkenleri kullanarak python'da 2D kontur grafiği

Aug 15 2020

Python'da çok yeni olduğumu kabul ederek bu sorguya başlayayım. Süreci otomatikleştirmek için Python'da verilerin kontur grafiğini oluşturmak istiyorum, aksi takdirde Surfer kullanılarak kolayca gerçekleştirilebilir. Bu tür 1000 veri dosyam var ve manuel olarak oluşturmak çok sıkıcı olabilir. Kullandığım veriler aşağıdaki gibi görünüyor, 0, 1 ve 2 başlıklarına sahip bir veri çerçevesi ve indeks olarak 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]

Buraya,

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

Kontur fonksiyonu olarak pf matplotlib, z'nin bir 2D dizisi olmasını gerektirir; karışıklığın başladığı yer burasıdır. Stackoverflow sorgularının birkaç çözümünün ardından aşağıdakileri yaptım:

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

Yukarıdaki kodla bu grafik türetilmiştir.

Bununla birlikte, bu arzu edilmez ve eğer bir kez yüzeysel gürültü hatlarından görülebiliyorsa, o zaman, burada sörfçü tarafından oluşturulan kontur grafiğinden görüldüğü gibi, aslında arzu edilen, altta düzenli kontur çizgileri vardır.

Sörfçü grafiğini oluştururken aynı verilerin kullanıldığını tekrarlamak isterim.

İstenilen arsayı oluştururken herhangi bir yardım çok takdir edilecektir.

Yanıtlar

ChandanDey Oct 07 2020 at 18:34

Cevap için @JohanC'ye teşekkürler. Sorgumla onun önerisini perspektife oturtmak istiyorum.

ax.contouryerine ax.tricontourgeçmesi durumumu çözer. Ve ax.tricontourfkontur dolgusunu yaptırır. Bu nedenle, kodumun son bölümü şöyle olacaktır:

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