更改色条轴的脊柱宽度

4
我想要改变两个轴的脊柱宽度:
img = np.random.normal(size=(100, 100))

fig, ax = plt.subplots()
cax = ax.imshow(img)

cbar = fig.colorbar(cax, ticks=np.linspace(0, 70, 8))
[i.set_linewidth(3) for i in cbar.ax.spines.itervalues()]
[i.set_linewidth(3) for i in ax.spines.itervalues()]

然而,我得到的结果如下所示:

enter image description here

如何改变彩色轴的脊柱长度?
2个回答

5

我本来以为你提供的解决方案能够正常工作,但一个可能的变通方法是设置 axes.linewidth 并移除 set_linewidth(3) 那几行代码。

import matplotlib
matplotlib.rcParams['axes.linewidth'] = 3

我通过找到这个来解决问题:https://github.com/matplotlib/matplotlib/blob/ac8f340c9a771871c894aecdc12a9111958271dd/lib/matplotlib/colorbar.py#L429 编辑 或者,您可以直接设置轮廓线宽度:
img = np.random.normal(size=(100, 100))

fig, ax = plt.subplots()
cax = ax.imshow(img)

cbar = fig.colorbar(cax, ticks=np.linspace(0, 70, 8))
cbar.outline.set_linewidth(3)
[i.set_linewidth(3) for i in ax.spines.itervalues()]

非常感谢您的回答!我尝试使用cbar.outline,但是找不到这个属性。您提供的解决方案适用于哪个版本的matplotlib?我正在使用一个使用1.5.1版本的旧代码进行绘图,无法更新它...而且我更希望使用一种局部解决方案,而不是改变全局的rcParams,因为有很多图表需要显示。 - desa
哦,我刚刚尝试了matplotlib v1.5.1和python2.7,似乎可以工作。您确定您使用的是精确版本吗?如果有任何区别,我也使用了TkAgg后端而不是默认的qt后端。 - bear24rw

2

您可以尝试重新设置色条轴的框架,以便其脊柱的更改生效。

cbar.ax.set_frame_on(True)

完整示例(仅在matplotlib 2.0上测试过)

import matplotlib.pyplot as plt
import numpy as np

img = np.random.normal(size=(100, 100))

fig, ax = plt.subplots()
im = ax.imshow(img)

cbar = fig.colorbar(im, ticks=np.linspace(0, 70, 8))
cbar.ax.set_frame_on(True)
[i.set_linewidth(3) for i in cbar.ax.spines.itervalues()]
[i.set_linewidth(3) for i in ax.spines.itervalues()]

plt.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接