我有一个彩条,其中包含正负值,这些值是自动生成的(我没有设置它们)。 不幸的是,减号破坏了文本的垂直对齐。 如何将刻度标签中的所有文本右对齐,或者在正数前插入一个空格使其看起来好看?
我有一个彩条,其中包含正负值,这些值是自动生成的(我没有设置它们)。 不幸的是,减号破坏了文本的垂直对齐。 如何将刻度标签中的所有文本右对齐,或者在正数前插入一个空格使其看起来好看?
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
cb = plt.colorbar(im)
for t in cb.ax.get_yticklabels():
t.set_horizontalalignment('right')
t.set_x(3.5)
我正要问同样的问题,最后找到了你的答案。因此,我想补充我的解决方法。
起初我使用了与Rutger Kassies提供的完全相同的解决方案。然而,在ipython中绘图时,当在小窗口查看或将图形设置为全屏时,相同数量的x
位置偏移会给出截然不同的结果。
最终,我选择了设置色条的刻度标签的pad
。 冒失地偷走了Rutger的示例代码:
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
cb = plt.colorbar(im)
ticklabs = cb.ax.get_yticklabels()
cb.ax.set_yticklabels(ticklabs,ha='right')
cb.ax.yaxis.set_tick_params(pad=45) # your number may vary
在创建色条时,使用“格式”选项最为简单。
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
colorbar_format = '% 1.1f'
cb = plt.colorbar(im, format=colorbar_format)
cb = plt.colorbar(im, ticks=your_own_ticks, format=colorbar_format)
arr = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(arr, interpolation=None)
cb = plt.colorbar(im)
def format_func(x, pos):
x = str(x)
pad = '' if x.startswith('-') else ' '
return '{}{}'.format(pad, x)
cb.ax.yaxis.major.formatter = mpl.ticker.FuncFormatter(format_func)
可以在这里找到Tick Locator和Formatter的文档。
我猜如果你切换到等宽字体,结果会更好。主要优点是不需要手动设置pad
或x
值。