[英]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.