繁体   English   中英

在 matplotlib 中,如果一个刻度标签太长,如何约束长度并让它以多行显示?

[英]In matplotlib, if one tick label is too long, how to constrain the length and let it show in multi-lines?

我想用 matplotlib 做一些绘图,但是有一个问题,我的一些刻度标签太长了。 我想知道是否可以使长刻度标签显示在多行中。

这是一些代码:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random(4)
idx = np.arange(4)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_ylim(-0.5, 4-0.5)
ax.set_yticks(b)
ax.tick_params(length=0)
ax.barh(idx, data, zorder=2, 
        tick_label=["qwertyuioplkjhgfdsa+1s",
        "abc","asd","qwerty"])
ax.grid(axis='x')

plt.show()

所以这是我得到的情节。结果
如你所见,底部ytick标签太长,我想每行最多设置10个字母,所以我希望tick标签可以显示在

qwertyuiop
lkjhgfdsa+
1s

或者在一行中有点不那么长。

任何帮助,将不胜感激!

您可以使用 python 的textwrap模块。 例如以 10 个字符换行:

import textwrap
f = lambda x: textwrap.fill(x.get_text(), 10)
ax.set_yticklabels(map(f, ax.get_yticklabels()))

您可以在显示绘图之前修改刻度标签,使每个max_chars字符都有一个换行符:

max_chars = 10

new_labels = ['\n'.join(label._text[i:i + max_chars ] 
                        for i in range(0, len(label._text), max_chars ))
              for label in ax.get_yticklabels()]

ax.set_yticklabels(new_labels)

尝试添加 \\n

ax.barh(idx, data, zorder=2, 
            tick_label=["qwertyuiop \n lkjhgfdsa+ \n 1s",
            "abc","asd","qwerty"])

暂无
暂无

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

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