我试图像这样包装我的x轴,但它仍然重叠。我不知道发生了什么。不知道我是否必须调整x轴高度的空间...但是如果我不知道该怎么做。你能给我指出正确的方向吗?谢谢
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib as mpl
import seaborn as sns
import textwrap
myvalues= {
'my_labels': [ 'Title one' ,'Title two extend' ,'Title three extend' ,'Title four extend' ,'Title five extend' ,'Title six extend' ,'Title seven extend'],
'val_1': [1,1,1,1,1,6,7],
'val_2': [3,6,3,5,7,1,9],
'val_3' : [5,5,2,4,4,5,4]
}
data = pd.DataFrame(myvalues, columns=['my_labels', 'val_1', 'val_2', 'val_3' ])
sns.set_context({"figure.figsize": (18, 10)})
ax=sns.barplot(x = data.my_labels, y = data.val_1, color = "#001a7b")
ax.set_xticklabels(['\n'.join(textwrap.wrap(ticklabel.get_text(),9)) for ticklabel in ax.get_xticklabels()])
ax.set(ylim=(0,3))
#edit:
axis2 = plt.twinx()
axis2.set(ylim=(0, 16))
axis2.grid(False)
line_1 = sns.lineplot(x = data.my_labels, y = data.val_1, color = "#E4521B", lineWidth=3, marker="o", ax=axis2, sort=False)
编辑: 更新的代码在条形图的顶部带有一行。当我删除它时,标签会被包裹起来,否则它会退回到第一行
答案 0 :(得分:0)
在线
ax.set_xticklabels(['\n'.join(textwrap.wrap(t.get_text(),9)) for x in ax.get_xticklabels()])
# why two different variables? ^ ^
# | |
您将标签迭代为x,但是随后调用了名为get_text()
的变量的方法t
。你应该写
ax.set_xticklabels(['\n'.join(textwrap.wrap(ticklabel.get_text(),9)) for ticklabel in ax.get_xticklabels()])
编辑
为响应您新修改的问题,对lineplot()
的调用将覆盖您先前设置的标签。要解决此问题,只需将行ax.set_xticklabels(...)
在之后 sns.lineplot()