问题描述
我正在处理学校的一项作业,在我的堆积面积图方面遇到了障碍。
数据相当简单:4 列看起来与此类似:
系列编号 | 年 | 期间 | 价值 |
---|---|---|---|
LNS140000 | 1948 | M01 | 3.4 |
我正在尝试使用 Year 作为我的 x 和 Value 作为我的 y 创建一个堆积面积图,并在一段时间内将其分解。
#Stacked area chart still using unemployment data
x = d.Year
y = d.Value
plt.stackplot(x,y,labels = d['Period'])
plt.legend(d['Period'],loc = 'upper left')
plt.show()enter code here`
然而,当我这样做时,它只拿起M01,还有M01-M12。关于如何使这项工作发挥作用的任何想法?
解决方法
在将数据传递给 stackplot 函数之前,您需要对其进行一些预处理。我查看了此 link 以研究可能适合您的情况的示例。 由于我看到了您的一行数据,因此我向数据集中添加了一些随机值。
import pandas as pd
import matplotlib.pyplot as plt
dd=[[1948,'M01',3.4],[1948,'M02',2.5],'M03',1.6],[1949,4.3],6.7],7.8]]
d=pd.DataFrame(dd,columns=['Year','Period','Value'])
years=d.Year.unique()
periods=d.Period.unique()
#Now group them per period,but in year sequence
d.sort_values(by='Year',inplace=True) # to ensure entire dataset is ordered
pds=[]
for p in periods:
pds.append(d[d.Period==p]['Value'].values)
plt.stackplot(years,pds,labels=periods)
plt.legend(loc='upper left')
plt.show()
这是你想要的吗?
,所以我可以使用 Seaborn 来提供帮助。首先我做了一个数据透视表
df = d.pivot(index = 'Year',columns = 'Period',values = 'Value')
df
然后我设置了seaborn
plt.style.use('seaborn')
sns.set_style("white")
sns.set_theme(style = "ticks")
df.plot.area(figsize = (20,9))
plt.title("Unemployment by Year and Month\n",fontsize = 22,loc = 'left')
plt.ylabel("Values",fontsize = 22)
plt.xlabel("Year",fontsize = 22)
,
在我看来,您遇到的问题与数据格式有关。看看这个 matplotlib example 中的值是如何格式化的。我会尝试按时间段groupby数据,或以正确格式pivot,然后再次绘制图表。