簡體   English   中英

Matplotlib:如何繪制輪廓圖?

[英]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')

但這看起來確實很丑陋,它transposeZ ,並且仍然需要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM