在matplotlib颜色栏中对齐ticklabels

时间:2013-10-07 08:18:20

标签: python matplotlib

我有一个带有正值和负值的颜色条,它们是自动生成的(我没有设置它们)。不幸的是,减号打破了文本的垂直对齐方式。如何将勾选标签中的所有文本对齐到右边,或者在我的正数之前插入一个空格以使其看起来很好?

enter image description here

4 个答案:

答案 0 :(得分:4)

您可以更改文本的对齐方式。可能需要稍微改变标签的(x)位置以防止与色条本身重叠。

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)

enter image description here

答案 1 :(得分:3)

我正要问同样的问题,然后终于找到了你的问题。所以我想添加自己的解决方法。

起初我使用完全相同的解决方案given by 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

这种解决方法在使用各种窗口大小和方面时似乎提供了更加一致的结果。

这里有4个输出来说明我的意思:顶行是位置移位解决方案,底行是我的填充解决方案。左边是默认的图形窗口大小,右侧是savefig ged后将图形窗口弹出全屏:

top row older solution, bottom row is mine

答案 2 :(得分:2)

在创建颜色栏时,使用format选项最简单。

script()

因此,基本上,您使用Python的“%”字符串格式。 https://pyformat.info/

如果您知道自己有否定词,请注意%后面的多余空间,它将为您“占位”,在肯定词上增加一个空格,在否定词上没有任何空格。您可能需要尝试一下才能使其最适合您的用例。我还注意到,如果您未设置自己的刻度值:

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)

刻度的数量和分布可能会根据您使用的格式而改变。

Example of formatted strings in plot colorbar labels

答案 3 :(得分:0)

如果您愿意容忍较小的负号,那么这对我来说似乎很好。

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)

可以找到here

的“刻度线定位器和格式化程序”文档

我的猜测是,如果切换到等宽字体,效果会更好。主要优点是无需手动设置padx值。

我还不够酷,无法嵌入图像,所以如果您有兴趣看到 输出为default大小,然后为maximizing