限制xticks pandas条形图中的字符

时间:2018-03-28 03:13:26

标签: python pandas matplotlib formatting

我有以下代码:

    df = input_df_.loc[input_df_.index.isin(inds)]
    df = df.drop(expected_metrics+metrics+['AgeNBR'],axis=1).mean()\
            .sort_values(ascending=False)[:25]
    df.plot(kind='bar',width=.4,position=1,color='red')
    full_df = input_df_[df.index].mean()
    full_df.plot(kind='bar',width=.4,position=0,color='blue')

    plt.show()

    difference = full_df - df

    difference.plot(kind='bar',color =  ['r' if x > 0 else 'b' for x in difference.values])
    plt.show()

代码可以正常运行,但由于某些x-ticks非常长,因此这两个图像最终会离得很远。有没有办法限制单个x-ticks中文本的大小?像前7个字符的东西?

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法处理x刻度:

locs, labels = xticks()

然后你可以迭代标签,只显示前7个字符:

for label in labels:
label=label[:7]

答案 1 :(得分:0)

您必须缩短标签文字,如:

...
ax=plt.gca()
ax.set_xticklabels(item.get_text()[:10] for item in ax.get_xticklabels())
...

在此过程之后,您的标签存储了10个符号。

答案 2 :(得分:0)

以下是提问者如何解决这个问题:

    plt.subplot(1,2,1)
    df.plot(kind='bar',width=.4,position=1,color='red')
    full_df = input_df_[df.index].mean()
    full_df.plot(kind='bar',width=.4,position=0,color='blue')\
        .set_xticklabels([str(tick)[:45] for tick in full_df.index])
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
    plt.gca().set_title('Selected and full feature set averages',fontsize=30)

    plt.subplot(1,2,2)     
    difference = df - full_df 

    difference.plot(kind='bar',color =  ['r' if x > 0 else 'b' for x in difference.values]).\
        set_xticklabels([str(tick)[:45] for tick in difference.index])
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
    plt.gca().set_title('Selected minus full feature set averages', fontsize=30)
    plt.show()