【问题标题】:Python Min and Max range for Color bar on Matplotlib Contour GraphMatplotlib 等高线图上颜色条的 Python 最小值和最大值范围
【发布时间】:2017-03-13 07:19:40
【问题描述】:

我正在尝试将等高线图上的颜色条范围从 0 编辑到 0.12,我尝试了一些方法,但没有成功。我不断得到全彩条范围直到 0.3,这不是我想要的。

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri
triang = tri.Triangulation(x, y)

plt.tricontour(x, y, z, 15, colors='k')

plt.tricontourf(x, y, z, 15, cmap='Blues', vmin=0, vmax=0.12,\
                extend ='both')
plt.colorbar()

plt.clim(0,0.12)

plt.ylim (0.5,350)

plt.xlim(-87.5,87.5)

plt.show()

xyz都是一列多行的数组。您可以在这里查看我的图表:

【问题讨论】:

  • 抱歉,这是哪个模块?是 matplotlib 吗?请用它标记以获得更好的响应
  • 是的,它是 matplotlib,感谢我添加了它。 (第一次在这里发问题!)
  • 什么是 x、y 和 z?
  • x,y 和 z 是相同大小的一维向量

标签: python matplotlib colors contour colorbar


【解决方案1】:

我认为这个问题确实有效。 @Fatma90:您需要提供一个工作示例,在您的情况下提供 x,y,z。

无论如何,我们可以自己创造一些价值观。所以问题是,plt.tricontourf() 简单地忽略了 vmin 和 vmax,我不知道有什么好的解决方案。

但是这里有一个解决方法,手动设置levels

plt.tricontourf(x, y, z, levels=np.linspace(0,0.12,11), cmap='Blues' )

这里我们使用了 10 个不同的关卡,看起来不错(如果使用不同数量的关卡,问题可能是有漂亮的刻度线)。

我提供一个工作示例来看看效果:

import numpy as np
import matplotlib.pyplot as plt

#random numbers for tricontourf plot
x = (np.random.ranf(100)-0.5)*2.
y = (np.random.ranf(100)-0.5)*2.
#uniform number grid for pcolor
X, Y = np.meshgrid(np.linspace(-1,1), np.linspace(-1,1))

z = lambda x,y : np.exp(-x**2 - y**2)*0.12

fig, ax = plt.subplots(2,1)

# tricontourf ignores the vmin, vmax, so we need to manually set the levels
# in this case we use 11-1=10 equally spaced levels.
im = ax[0].tricontourf(x, y, z(x,y), levels=np.linspace(0,0.12,11), cmap='Blues' )
# pcolor works as expected
im2 = ax[1].pcolor(z(X,Y), cmap='Blues', vmin=0, vmax=0.12 )

plt.colorbar(im, ax=ax[0])
plt.colorbar(im2, ax=ax[1])

for axis in ax:
    axis.set_yticks([])
    axis.set_xticks([])
plt.tight_layout()
plt.show()

这会产生

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多