簡體   English   中英

x軸的seaborn matplotlib包裝不起作用

[英]seaborn matplotlib wrapping of x axis not working

我試圖像這樣包裹我的 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)

編輯:用條形頂部的線更新代碼。 當我刪除它時,標簽會被包裹,否則它會回到一行

在行中

ax.set_xticklabels(['\n'.join(textwrap.wrap(t.get_text(),9)) for x in ax.get_xticklabels()])
# why two different variables?              ^                    ^
#                                           |                    |

您將標簽作為 x 迭代,然后調用名為t的變量的get_text()方法。 你應該寫

ax.set_xticklabels(['\n'.join(textwrap.wrap(ticklabel.get_text(),9)) for ticklabel in ax.get_xticklabels()])

編輯

針對您新修改的問題,對lineplot()的調用會覆蓋您之前設置的標簽。 要解決這個問題,只需在ax.set_xticklabels(...)之后移動ax.set_xticklabels(...) sns.lineplot()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM