在海运条形图x轴Python中换行文本

问题描述

我正在尝试绘制数据帧,并且我希望x轴标签不会像这里那样相互覆盖

处理一个曲线图时,添加.set_xticklabels(rotation=30)确实解决了这个问题:

sns.catplot("foo", data=boo, aspect=5, kind="count" ).set_xticklabels(rotation=30)

但是当我添加ax参数时,如下所示:

sns.catplot("foo", data=boo, aspect=5, kind="count" , ax=fig.add_subplot(211) ),

不是(请参阅第一个快照)。

我已尝试sns.catplot("foo", data=boo, aspect=5, kind="count", ax=ax1).set_xticklabels(rotation=30)

我正在寻找某种Excel的"换行文本"。我试着在海运属性中寻找,但没有成功。我还尝试将x轴值设置得更小,但它仍然覆盖了某些标签中的每个值。


解决方案

光盘-这是我在‘StackOF’上的第一篇帖子。如果没有达到您的期望,请原谅。在海运中包装x轴标签是不可能的(AFAIK),但即使使用DEXPT,也有太多限制。以下是使用Matplotlib(使用Python)实现此目标的逻辑。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

raw_data = {'plan_type':  ['this is big ticks number one', 'this is also a big ticks number two Group B', 'and this as well a very big ticks number three Group C', 'this is no exception than a very big ticks number four Group D','Group E'],
        'Total': [56,24,18,49,67],
        'Total_PY': [12,82,33,60,16]
}


df = pd.DataFrame(raw_data, 
              columns = ['plan_type', 'Total', 'Total_PY'])


fig, ax = plt.subplots(figsize=(14,9))
ax = df.plot.bar(rot=0, ax=ax, color=['#FF5733','#2323ff'], 
             width = 0.7 )


for p in ax.patches[1:]:
h = p.get_height()
x = p.get_x()+p.get_width()/2.
if h != 0 :
    ax.annotate("%g" % p.get_height(), xy=(x,h), xytext=(0,4), rotation=0, 
               textcoords="offset points", ha="center", va="bottom")


ax.set_xlim(-0.5, None)
ax.set_ylim(-0.5, 120)
ax.margins(y=0)

ax.legend(ncol = len(df.columns), loc="lower right", bbox_to_anchor=(0,1.02,1,0.08), 
          borderaxespad=0, title= 'Year' )


ax = plt.gca();
labels = df["plan_type"].tolist()
new_labels = []

for tick in labels:
word_list = tick.split();
new_labels.append(word_list);


new_ticks = []
for label_tick in new_labels:

if(len(label_tick) >= 2):

    joined = ' 
'.join(label_tick);
    new_ticks.append(joined) ;
else:
    joined = ' '.join(label_tick);
    new_ticks.append(joined) ;

plt.xticks(ticks = df.index, labels = new_ticks)
plt.xlabel('Type of Plan')
plt.ylabel('Count of Numbers')

相关文章