matplotlib 调整colorbar的区间
可以使用 vmin
和 vmax
参数来调整 colorbar 的区间。
示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图像
fig, ax = plt.subplots()
im = ax.imshow(y.reshape(-1, 1), cmap='coolwarm')
# 添加colorbar,并设置区间范围
cbar = fig.colorbar(im)
cbar.set_ticks([-1, 0, 1])
cbar.set_ticklabels(['Low', 'Medium', 'High'])
cbar.set_clim(vmin=-1, vmax=1)
plt.show()
运行结果:
matplotlib的colorbar色条
如何在 Matplotlib 中设置和自定义 Colorbar 色条
使用 Colorbar
类创建基于现有图像的颜色条
对于大多数情况,当有一个已经绘制好的图形对象(mappable),可以直接通过调用 plt.colorbar()
或者 figure.colorbar(mappable)
来快速添加一个默认配置下的颜色条[^1]。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
pcm = ax.pcolormesh(np.random.rand(10, 10))
fig.colorbar(pcm, ax=ax)
plt.show()
利用 ColorbarBase
实现完全独立的 Colorbar 定制化设计
如果希望构建一个不依赖于具体绘图实例的颜色条,则需借助 mpl.colorbar.ColorbarBase
类来完成这一目标。这种方式提供了极大的灵活性,允许开发者精确控制每一个细节,比如边界范围、离散区间划分等特性[^2]。
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np
# 创建一个新的 figure 和 axis 对象用于放置 colorbar
fig, _ = plt.subplots()
# 构建辅助工具帮助我们更方便地定位新加入的 axes
divider = make_axes_locatable(fig.gca())
# 新增一个小区域专门用来显示 colorbar
cax = divider.append_axes('right', size='5%', pad=0.05)
# 初始化 colormap 并指定其映射规则
norm = colors.Normalize(vmin=-4000, vmax=10000)
# 基于上述设定生成 colorbar
cb = plt.colorbar(
cm.ScalarMappable(norm=norm),
cax=cax,
orientation='vertical'
)
plt.show()
为了进一步增强定制能力,还可以调整更多属性:
- Colormap: 更改使用的色彩方案;
- Ticks and Tick Labels: 修改刻度位置及其标签文字;
- Boundaries & Extend: 设置分级界限并决定超出边界的处理方式;
这些都可以通过对相应参数赋值实现个性化修改[^3]。
matplotlib 色条
如何在 Matplotlib 中添加和自定义色条
添加默认色条
为了向图像添加颜色条,可以使用 fig.colorbar()
方法。下面是一个简单的例子展示如何绘制带有颜色条的热力图:
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))
# 创建图形对象并获取当前坐标轴
fig, ax = plt.subplots()
# 使用imshow函数显示矩阵作为图片,并指定颜色映射表为'viridis'
cax = ax.imshow(Z, interpolation='nearest', cmap='viridis')
# 向图表中加入颜色条
fig.colorbar(cax)
# 设置标题
ax.set_title('Default Colormap with Colorbar')
plt.show()
此段代码展示了怎样通过调用fig.colorbar()
方法给由imshow()
生成的画面增加一个垂直方向的颜色条[^1]。
自定义单个子图中的色条
当处理多个子图时,可以通过设置特定位置参数来自定义单一共享的颜色条:
import numpy as np
import matplotlib.pyplot as plt
# 初始化画布布局
fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
im = ax.imshow(np.random.random((10, 10)), vmin=0, vmax=1)
# 调整右侧空间以便放置公共颜色条
fig.subplots_adjust(right=0.8)
# 定义颜色条的位置(左边界、下边界、宽度、高度)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
# 将选定的图像传递给colorbar(), 并指明其所在区域
fig.colorbar(im, cax=cbar_ax)
plt.show()
这段脚本说明了如果想要让几个不同的子图共用同一个颜色条,则需先预留足够的空白区用于容纳该组件,再利用add_axes()
定位它的确切范围[^2]。
应用自定义渐变色彩方案
对于更复杂的场景,可能希望创建独特的颜色过渡效果。这可通过构建线性分段型Colormap实例完成,允许精确控制每一段之间的转换关系:
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.pyplot as plt
import numpy as np
colors = ["#FFAAAA", "#AAFFAA", "#AAF0FF"] # RGB Hex Codes
n_bins = [100] * len(colors) # 分割区间数量列表
cm = LinearSegmentedColormap.from_list(name="custom_cmap", colors=colors, N=sum(n_bins))
norm = plt.Normalize(vmin=-1., vmax=1.)
data = np.outer(np.arange(0, 3, 0.01), np.ones(300))
im = plt.imshow(data, cmap=cm, norm=norm)
plt.colorbar(im, orientation='vertical')
plt.title("Custom Gradient Colors")
plt.show()
上述程序片段解释了怎样基于一组预设好的RGB十六进制码建立新的连续色调变化模式,并将其应用于实际绘图操作之中[^3]。
相关推荐















