如何更改各个颜色条标签的字体粗细?

时间:2019-06-04 09:59:17

标签: python-3.x matplotlib colorbar

我希望每个颜色栏标签具有不同的字体粗细。

我试图让LaTeX通过以下方式格式化标签:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
im = ax.imshow(np.random.rand(50, 50)/20)
cbar = ax.figure.colorbar(im, ticks=np.arange(0, 0.05, 0.01))
cbar.ax.set_yticklabels([r'{\fontsize{50pt}{3em}\selectfont{}{0}}',
                         r'{\fontsize{40pt}{3em}\selectfont{}{0.01}}',
                         r'{\fontsize{30pt}{3em}\selectfont{}{0.03}}',
                         r'{\fontsize{20pt}{3em}\selectfont{}{0.03}}',
                         r'{\fontsize{10pt}{3em}\selectfont{}{0.04}}',
                         r'{\fontsize{1pt}{3em}\selectfont{}{0.05}}', ])

,但这只会将标签的文本更新为整个字符串(例如{\ fontsize {50pt} {3em} \ selectfont {} {0}})。 pyplot TeX demo为我工作。即使此解决方案能奏效,也不是理想选择,因为我可能需要手动指定所有内容。

question中将更方便。在那里,我了解到可以通过调用来更新常规x和y轴的单个标签的字体大小

label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)

set_fontsize代替set_fontweight可以正确更新所选标签的重量。 不幸的是,我找不到与色条相同的axes.yaxis.get_major_ticks()[2].label

是否可以直接更改颜色条各个标签的字体粗细?直接指的是不使用诸如在现有标签上方绘制一些新文本之类的变通办法。 如果无法做到这一点,那么最好在现有标签上方绘制文本的解决方案,该解决方案将自动使用先前标签的位置和内容,并仅调整字体粗细。

谢谢!

1 个答案:

答案 0 :(得分:0)

如@ImportanceOfBingErnest所指出,set_fontweight还可用于设置单个颜色条标签的权重。 我不得不尝试一些事情来找到哪个调用可以给我定义彩条标签的文本对象。它们可以在cbar.ax.get_yticklabels()中访问。 现在,下面的代码片段可以正确更改第二个颜色栏标签的权重:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
im = ax.imshow(np.random.rand(50, 50)/20)
cbar = ax.figure.colorbar(im, ticks=np.arange(0, 0.05, 0.01))
cbar.ax.get_yticklabels()[1].set_fontweight(1000)
plt.show()

Output of code (not enough reputation for inline images)