繁体   English   中英

在 matplotlib 颜色栏中对齐刻度标签

[英]Align ticklabels in matplotlib colorbar

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

在此处输入图片说明

您可以更改文本的对齐方式。 可能需要稍微更改标签的 (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)

在此处输入图片说明

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

起初,我使用了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弹出图窗口,全屏后的盖德:

顶行较旧的解决方案,底行是我的

创建颜色条时,使用格式选项最容易做到这一点。

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)

所以基本上你使用Python“%”字符串格式。 https://pyformat.info/

如果你知道你有底片,请注意 % 后面的额外空间,它会为你“占位”,为正片添加一个空格,为负片添加一个空格。 您可能需要解决这个问题以使其最适合您的用例。 我还注意到,如果您没有设置自己的刻度值:

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 的文档

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

我还不够酷来嵌入图像,所以如果你有兴趣在这里看到输出,它是默认大小,在最大化.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM