matplotlib 如果一个勾选标签太长,如何限制长度,让它显示在多行中?

1rhkuytd  于 2023-05-23  发布在  其他
关注(0)|答案(3)|浏览(197)

我想用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

或者在一行中稍微不那么长。
任何帮助将不胜感激!

5lhxktic

5lhxktic1#

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

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

k3bvogb12#

尝试添加\n到它

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

6tdlim6h3#

您可以在显示图之前修改刻度标签,使其每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)

相关问题