设置颜色条以显示matplotlib中数据范围之外的值

问题描述 投票:2回答:2

我正在尝试创建一个图形,其中颜色栏将超出数据范围(大于数据的最大值)。最终目的是我需要绘制一系列模型输出的图像(随着时间的推移),并且每个小时都存储在一个单独的文件中。我希望所有图形的颜色条都相同,以便可以将它们加入动画中。

这里是示例脚本:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 360, 1.5)
y = np.arange(-90, 90, 1.5)
lon, lat = np.meshgrid(x, y)
noise = np.random.random(lon.shape) # values in range [0, 1)

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, noise)
plt.colorbar()

这将产生下图:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS94WEl1OS5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

我一直在尝试使用两种在网上找到的方法将颜色条的限制设置为数据范围之外的值(例如,从-1到2。)>

在绘图线内设置vmin = -1和vmax = 2:

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, noise, vmin=-1., vmax=2.)
plt.colorbar()

这似乎只会更改显示的颜色,因此颜色图中的第一个颜色将对应于-1,最后一个颜色对应于2,但不会扩展颜色栏以显示这些值(下面链接中的左图)。

另一种是尝试在颜色栏中强制执行刻度线以扩展到该范围:

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, noise)
plt.colorbar(ticks=np.arange(-1,2.1, .2))

[这将导致定义的刻度位置,但仅适用于有数据的范围,即,颜色栏仍未从-1扩展到2(下面链接中的中间图)。

有人知道我将如何让它做我想要的吗?类似于此链接上的右图:http://orca.rsmas.miami.edu/~ajdas1/SOF/n.html

我正在尝试创建一个图形,其中颜色栏将超出数据范围(大于数据的最大值)。最终目的是我需要绘制一系列图像(作为时间...

python matplotlib colorbar
2个回答
1
投票

对于大多数2D绘图功能(例如imshowpcolor等),设置vminvmax即可完成。但是,contourf(还有contour)会考虑您在映射颜色时要求其绘制轮廓的levels

如果未指定levels参数,则该函数会自动从数据的最小值到最大值生成10个等间隔的级别。因此,要实现所需的功能(在各种输入数据上保持一致),必须明确指定级别:


0
投票

Colorbar limits are not respecting set vmin/vmax in plt.contourf. How can I more explicitly set the colorbar limits?给出了解决此问题的好例子。

如果一系列图像的颜色条共享相同的ScalarMappable实例

© www.soinside.com 2019 - 2024. All rights reserved.