奇怪的x标签与堆积面积图

时间:2016-03-08 20:06:00

标签: python matplotlib

stacked area chart

任何人都知道为什么我会得到这些奇怪的x轴标签?原始代码有注释行,产生类似的结果,所以我尝试按字母顺序列表检查导致问题的原因并获得相同的结果。

以下是代码:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np
input_file = 'CSP.csv'
output_file = 'sub_plots.png'
y = []
#susbset to SDs first
df1 = df[(df.Class=='FIR')]
x = np.arange(len(df1.ix[:,0]))
for i in range(8):
    y.append(df1.ix[:,i+7])
fig, ax = plt.subplots()
labels=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','aa','ab','ac']
ax.stackplot(x,y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7])
#labels = [str(i) for i in list(df1.Local_Authority)]
plt.xticks(x,labels,size='small')
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=90)
fig = plt.gcf()
fig.subplots_adjust(bottom=0.3)
plt.savefig(output_file_1)

1 个答案:

答案 0 :(得分:1)

问题是由get_majorticklabels返回Text个对象列表而set_xticklabels接受字符串列表作为第一个输入这一事实引起的。因此,由于您将此Text个对象列表传递给set_xticklabels,因此Text个对象会被强制转换为字符串,这些字符串会为您提供您所看到的xtick标签。

要解决此问题,您需要从现有刻度中获取实际标签并将其传递给set_xticklabels()

labels = [label.get_text() for label in ax.xaxis.get_majorticklabels()]
ax.set_xticklabels(labels, rotation=90)

或者,看起来您已经创建了一个用作标签的字符串列表,因此您可以直接使用它。

labels = ['a', 'b', 'c', .....]
ax.set_xticklabels(labels, rotation=90)