X轴的seaborn matplotlib包装不起作用

时间:2020-03-27 10:05:45

标签: python matplotlib seaborn

我试图像这样包装我的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)

编辑: 更新的代码在条形图的顶部带有一行。当我删除它时,标签会被包裹起来,否则它会退回到第一行

1 个答案:

答案 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()

相关问题