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