colorbar生成的新Axes存于何处?如何访问该Axes?
如何访问matplotlib中自动创建的colorbar轴对象?
colorbar参数说明
cax: Axes,可选
用于绘制colorbar的轴对象。若设为None,则会创建一个新的轴对象,并从ax参数指定的轴对象中占用空间。ax: Axes或Axes的可迭代对象或numpy.ndarray,可选
用于为新的colorbar轴对象腾出空间的一个或多个父级轴对象。仅当未设置cax时才会使用此参数。
默认值为包含用于创建colorbar的可映射对象的轴对象。
修改后的示例代码
import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm # 固定随机种子以保证结果可复现 np.random.seed(19680801) Z = np.random.rand(6, 10) fig, (ax0, ax1) = plt.subplots(2, 1) c = ax0.pcolor(Z) ax0.set_title('默认:无边框') fig.colorbar(c, ax=ax0) c = ax1.pcolor(Z, edgecolors='k', linewidths=4) ax1.set_title('粗边框') fig.tight_layout() plt.show()
问题描述
在上述代码中,我使用了colorbar的ax参数,按预期系统会在ax0旁创建一个新的轴对象。我该如何访问这个新的轴对象?我希望通过colorbar参数之外的方式对其进行自定义。
例如,我尝试了以下代码:
ax0[0].set_title('默认:无边框')
但显然ax0对象不支持下标操作。
解决方案
要访问自动创建的colorbar轴对象,最直接的方式是捕获fig.colorbar()的返回值。该函数返回的Colorbar对象拥有ax属性,对应就是colorbar所在的轴对象,你可以通过这个属性对其进行任意自定义操作。
示例代码修改如下:
import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm np.random.seed(19680801) Z = np.random.rand(6, 10) fig, (ax0, ax1) = plt.subplots(2, 1) c = ax0.pcolor(Z) ax0.set_title('默认:无边框') # 捕获colorbar对象 cb = fig.colorbar(c, ax=ax0) # 获取colorbar对应的轴对象 cb_ax = cb.ax # 自定义操作示例:设置颜色条的轴标签 cb_ax.set_ylabel('自定义颜色刻度') c = ax1.pcolor(Z, edgecolors='k', linewidths=4) ax1.set_title('粗边框') fig.tight_layout() plt.show()
如果已经创建了colorbar但未捕获返回值,也可以通过遍历当前figure的所有轴对象来筛选出colorbar的轴:
# 遍历figure中的所有轴 for ax in fig.axes: if ax.get_label() == '<colorbar>': # 找到colorbar轴对象,执行自定义操作 ax.set_yticklabels(['低', '中', '高']) break
内容的提问来源于stack exchange,提问作者Rol
相关产品推荐
相关产品推荐

