首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移位的colorbar matplotlib

移位的colorbar matplotlib
EN

Stack Overflow用户
提问于 2013-11-22 20:06:32
回答 1查看 14K关注 0票数 29

我正在尝试为数据集创建填充的等高线。它应该相当简单:

代码语言:javascript
复制
plt.contourf(x, y, z, label = 'blah', cm = matplotlib.cm.RdBu)

但是,如果我的数据集不是关于0的对称,我该怎么办?假设我想从蓝色(负值)到0(白色),再到红色(正值)。如果我的数据集从-8到3,那么颜色条的白色部分应该是0,实际上是略微负的。有什么方法可以改变颜色条吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 22:14:45

首先,有不止一种方法可以做到这一点。

  1. DivergingNorm的一个实例作为norm kwarg传递。
  2. 使用colors kwarg进行contourf,并使用由

构造的离散色彩映射表手动指定颜色

最简单的方法是第一种选择。它也是允许您使用连续颜色映射的唯一选项。

使用第一个或第三个选项的原因是,它们适用于使用色彩映射表的任何类型的matplotlib绘图(例如imshowscatter等)。

第三个选项从特定颜色构造离散色彩映射和规范化对象。它基本上与第二个选项相同,但它将a)使用其他类型的绘图,而不是等高线图,以及b)避免手动指定等高线的数量。

作为第一个选项的示例(这里我将使用imshow,因为对于随机数据,它比contourf更有意义,但是除了interpolation选项之外,contourf具有相同的用法):

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import DivergingNorm

data = np.random.random((10,10))
data = 10 * (data - 0.8)

fig, ax = plt.subplots()
im = ax.imshow(data, norm=DivergingNorm(0), cmap=plt.cm.seismic, interpolation='none')
fig.colorbar(im)
plt.show()

作为第三个选项的示例(请注意,这将提供离散颜色映射而不是连续颜色映射):

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import from_levels_and_colors

data = np.random.random((10,10))
data = 10 * (data - 0.8)

num_levels = 20
vmin, vmax = data.min(), data.max()
midpoint = 0
levels = np.linspace(vmin, vmax, num_levels)
midp = np.mean(np.c_[levels[:-1], levels[1:]], axis=1)
vals = np.interp(midp, [vmin, midpoint, vmax], [0, 0.5, 1])
colors = plt.cm.seismic(vals)
cmap, norm = from_levels_and_colors(levels, colors)

fig, ax = plt.subplots()
im = ax.imshow(data, cmap=cmap, norm=norm, interpolation='none')
fig.colorbar(im)
plt.show()

票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20144529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档