繁体   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