【问题标题】:Matplotlib - creating a filled 2d contour plotMatplotlib - 创建一个填充的二维等高线图
【发布时间】:2013-06-11 01:33:02
【问题描述】:

我已经使用松弛法计算了一些表示作为 x,y 函数的势的值。我想用颜色(不是线条)显示等高线图,但是matplotlib 的例子都是花哨的 3d 图。我有一个 ufinal 对象,它是一个二维 numpy 数组。我确实在 SO 上看到了一些很好的答案,但我无法正确使用它们来处理我的数据。我能够使用示例绘制 3d 图,但这不是我需要的:

fig = plt.figure()
ax = fig.gca(projection='3d')

X,Y=meshgrid(x,y)

surf=ax.plot_surface(X,Y,ufinal,rstride=1,cstride=1,cmap=cm.jet,linewidth=0.1)
fig.colorbar(surf,shrink=0.5,aspect=5)

正如我所建议的那样,我尝试使用 contourf 示例:

CS = plt.contourf(X, Y, ufinal,cmap=cm.jet)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')

【问题讨论】:

标签: python python-2.7 matplotlib plot


【解决方案1】:

正如大卫所说,使用contourf

import numpy as np
import pylab as pl

x,y = np.mgrid[:1:1E-3,:1:1E-3]
xs = ((x-0.3)**2.)
ys = ((y-0.5)**2.)
z = np.exp(-1*(xs/0.5+ys/0.3))

pl.contourf(x,y,z,20)

【讨论】:

  • 谢谢大家,我已经尝试过使用基本示例,但它看起来很丑2d contourf 至少3d image 看起来不错,它至少创造了接近连续的错觉。我究竟做错了什么 ? (粘贴问题中的代码)
  • 这对你来说只是一个非常快速和肮脏的例子 :) 我想你可以从增加你正在绘制的轮廓的数量开始。如果这对您来说看起来不够流畅,您可以随时在密集网格中评估您的函数,然后只需 imshow 结果。
  • 谢谢,但能否详细说明最后一个选项?也许有一个选项可以在 3d 图中绘制类似瓷砖的东西,但在 2d 中,所以它看起来像一个等高线图(因为着色),但它只会尝试应用颜色作为值的函数(例如,较小的编号越“蓝”等)因为似乎增加行数并不能减少它,它不够细化。
  • 例如,使用我刚刚给您的代码,尝试imshow(z,cmap=pl.cm.jet),您将获得二维高斯的“平滑”表示,在 x 中的 0 和 1 之间以 0.001 的间隔进行评估和 y 维度。请注意,(1) x 和 y 维度将出现交换(因为在这种情况下,不同的 x 值映射到 z 中的行)和 (2) y 轴将出现反转(因为 imshow 放置原点在左上角)。您还可以使用不同的颜色图 - 尝试 cm.hotcm.gray 等。
【解决方案2】:

如果有人仍然感兴趣,我在这里找到了粒度(又名美观问题)的解决方案作为解决方案的一部分: Symmetrical Log color scale in matplotlib contourf plot

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2012-09-18
  • 2017-03-22
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多