Matplotlib中绘图轴与色条轴行为差异及修改方法咨询
解决Matplotlib中色条轴(cb.ax)与主绘图轴(ax)的修改差异问题
问题核心在于色条轴的坐标系方向和主绘图轴默认不同,虽然两者都是AxesSubplot实例,但它们的主轴指向、可见spine的作用完全不一样:
为什么修改cb.ax没效果?
- 主绘图轴默认是笛卡尔坐标系,x轴水平、y轴垂直,
bottom和left是主要显示的坐标轴spine,修改它们会直接影响绘图外观。 - 默认生成的色条是垂直方向,它的坐标轴以y轴作为色条的长度方向,x轴宽度极窄几乎不可见。此时色条的刻度轴对应的是
rightspine(默认),而left/bottomspine要么本来就隐藏,要么不在视觉上的主要显示区域,所以修改它们看不到明显变化。
正确修改色条轴的方法
根据色条的方向(垂直/水平),针对性修改对应的spine:
1. 垂直色条的修改示例
垂直色条的主要刻度轴是right(或left)spine,调整这些spine才能看到效果:
import matplotlib.pyplot as pl import numpy as np pl.figure() ax = pl.subplot() im = pl.imshow(np.random.random(16).reshape(4,4)) cb = pl.colorbar(im) # 主绘图轴修改 ax.spines['left'].set_visible(False) ax.spines['bottom'].set_position(('outward', 5)) # 色条轴修改:针对垂直色条 cb.ax.spines['right'].set_position(('outward', 5)) # 将色条刻度轴向外偏移 cb.ax.spines['top'].set_visible(False) # 隐藏色条顶部spine cb.ax.spines['left'].set_visible(False) # 隐藏色条左侧spine(本来就不可见,可选) pl.show()
2. 水平色条的修改示例
如果是水平色条,刻度轴对应的是bottom(或top)spine,此时修改bottom就会和主绘图轴的效果一致:
import matplotlib.pyplot as pl import numpy as np pl.figure() ax = pl.subplot() im = pl.imshow(np.random.random(16).reshape(4,4)) cb = pl.colorbar(im, orientation='horizontal') # 主绘图轴修改 ax.spines['left'].set_visible(False) ax.spines['bottom'].set_position(('outward', 5)) # 色条轴修改:针对水平色条 cb.ax.spines['bottom'].set_position(('outward', 5)) # 偏移色条刻度轴 cb.ax.spines['left'].set_visible(False) # 隐藏色条左侧spine pl.show()
额外小技巧
可以通过cb.ax.get_yticks()或cb.ax.get_xticks()判断色条方向:
- 有返回值的
get_yticks()说明是垂直色条 - 有返回值的
get_xticks()说明是水平色条
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

