首页 > 解决方案 > matplotlib 中颜色条刻度标签的旋转重置刻度标签格式

问题描述

如果我对颜色条标签进行旋转,我使用的格式似乎被重置(忽略)。

fig.colorbar不接受旋转,同时不cb.ax.set_xticklabels接受格式。我找不到任何方法来进行这两种设置。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import FormatStrFormatter

test = np.random.rand(100, 100)
np.random.seed(12345)

fig, axs = plt.subplots(1, 2, figsize=(6, 5))
fmts = ["%d", "%.5f"]

for i, ax in enumerate(axs.tolist()):
    im = ax.imshow(test, origin="lower")
    cb = fig.colorbar(im, ax=ax, orientation='horizontal', 
                      format=FormatStrFormatter(fmts[i]))
    ax.set_title(f"Format {fmts[i]}")

    cb.ax.set_xticklabels(cb.get_ticks(), rotation=45)

plt.tight_layout()
plt.show()

颜色条刻度标签的格式应为“%d”和“%.5f”,但如您所见,两者都不是。

标签: pythonmatplotlib

解决方案


我认为调用时不会保留原始格式cb.ax.set_xticklabels(),您可以添加cb.ax.xaxis.set_major_formatter(FormatStrFormatter(fmts[i]))以在之后重新应用自定义格式。

作为替代方案,请改为使用plt.setp(cb.ax.get_xticklabels(),rotation=45)来旋转标签。


推荐阅读