[英]Matplotlib contour plot from xyz data with scale
我正在嘗試使用xyz數據在matplotlib中繪制2D等高線圖。 我要繪制兩組Z數據(z_a和z_b)。 我已經能夠繪制數據並繪制等高線圖,但是我無法在兩個圖形上都設置比例尺(比例尺應針對z數據)。
當我使用以下代碼時,出現錯誤消息“ TypeError:輸入z必須是2D數組。” 我以為我的z數據在一個數組中,所以我不太確定為什么會收到此錯誤,有人可以闡明這個問題嗎? 謝謝!
import numpy as np
import matplotlib.pyplot as plt
x = [68,77,95,111,120,148,148,148,175,185,200,218,228]
y = [135,190,87,149,226,68,112,187,225,149,87,190,135]
z_a = [22.87,22.87,23.75,22.81,22.94,22.94,22.94,22.81,22.87,23.06,23.06,23.0,23.12]
z_b = [24.06,24.06,24.94,24.0,24.06,24.12,24.19,24.06,24.12,24.25,24.25,24.25,30]
f, ax = plt.subplots(1,2, sharex=True, sharey=True)
ax[0].tricontourf(x,y,z_a, 100)
ax[0].plot(x,y, 'ko ')
ax[1].tricontourf(x,y,z_b, 100)
ax[1].plot(x,y, 'ko ')
plt.contourf(x, y, z_a, 8)
contour_labels = plt.contour(x, y, z_a, 8, colors='black', linewidth=.5)
plt.show()
您可以使用如下所示的griddata:
from scipy.interpolate import griddata
x = [68,77,95,111,120,148,148,148,175,185,200,218,228]
y = [135,190,87,149,226,68,112,187,225,149,87,190,135]
z_a = [22.87,22.87,23.75,22.81,22.94,22.94,22.94,22.81,22.87,23.06,23.06,23.0,23.12]
z_b = [24.06,24.06,24.94,24.0,24.06,24.12,24.19,24.06,24.12,24.25,24.25,24.25,30]
f, ax = plt.subplots(1,2, sharex=True, sharey=True)
ax[0].tricontourf(x,y,z_a, 100)
ax[0].plot(x,y, 'ko ')
ax[1].tricontourf(x,y,z_b, 100)
ax[1].plot(x,y, 'ko ')
xi = np.linspace(np.min(x), np.max(x), 100)
yi = np.linspace(np.min(y), np.max(y), 100)
zia = griddata((x,y),z_a,(xi[None,:],yi[:,None]),method='linear')
zib = griddata((x,y),z_b,(xi[None,:],yi[:,None]),method='linear')
ax[0].contourf(xi, yi, zia, 8)
contour_labels = ax[0].contour(xi, yi, zia, 8, colors='black', linewidth=.5)
ax[0].clabel(contour_labels,inline=1,inline_spacing=0,fontsize=10,fmt='%1.0f',colors='k')
ax[1].contourf(xi, yi, zib, 8)
contour_labels = ax[1].contour(xi, yi, zib, 8, colors='black', linewidth=.5)
ax[1].clabel(contour_labels,inline=1,inline_spacing=0,fontsize=10,fmt='%1.0f',colors='k')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.