[英]Matplotlib: How to make a contour plot?
我有一個要繪制輪廓圖的函數: mixed_model_pdf([[x,y]])
。
它只接受[x,y]
,而不是X,Y作為輸入。 也就是說, mixed_model_pdf([[-5,-5]])
或mixed_model_pdf([[-5,-5],[-5,-4]])
但是要執行plt.contourf(X, Y, Z)
,應該按特定順序放置Z
值,我該怎么做?
現在,我可以解決這個問題:
X = Y = np.arange(-30, 31, 1)
N, M = len(X), len(Y)
Z = np.zeros((N, M))
for i, (x,y) in enumerate(product(X,Y)):
Z[np.unravel_index(i, (N,M))] = mixed_model_pdf([[x,y]])
Z = Z.T
X, Y = np.meshgrid(X, Y)
# Plot 2d prob density
fig, ax = plt.subplots(figsize=(8, 8), dpi=80)
ax.set_aspect('equal')
plt.contourf(X, Y, Z, 10, alpha=.75, cmap='jet')
但這看起來確實很丑陋,它transpose
了Z
,並且仍然需要X, Y = np.meshgrid(X, Y)
。
有什么更好的方法呢?
更新:
現在,我可以使代碼更加清晰:
X = Y = np.arange(-30, 31, 1)
XX,YY=np.meshgrid(x,y)
coords=np.array((XX.ravel(), YY.ravel())).T
Z = mixed_model_pdf(coords).reshape(61,61)
fig, ax = plt.subplots(figsize=(8, 8), dpi=80)
ax.set_aspect('equal')
plt.contourf(X, Y, Z, 10, alpha=.75, cmap='jet')
但是,如何縮短.reshape()
呢? 它是根據Y = np.arange(-30, 31, 1)
,我認為它可能是自動化的?
收集我的評論答案。
您可以plt.contourf
不同的方式調用plt.contourf
。 文檔明確指出了這一點:
X和Y必須都是與Z形狀相同的2-D,或者它們都必須是1-D,以使len(X)是Z中的列數,而len(Y)是Z中的行數。
您可以從交互式Python提示符中獲取文檔:
>>> help(plt.contourf)
或者,如果您使用IPython(Notebook),則應該這樣做;):
In [1]: plt.contourf?
您可以使用:
Z = mixed_model_pdf(coords).reshape(Y.size, Y.size)
避免對61
進行硬編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.