Python 中的堆积面积图

问题描述

我正在处理学校的一项作业,在我的堆积面积图方面遇到了障碍。

数据相当简单: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()

Stack Area Plot

这是你想要的吗?

,

所以我可以使用 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)

enter image description here

,

在我看来,您遇到的问题与数据格式有关。看看这个 matplotlib example 中的值是如何格式化的。我会尝试按时间段groupby数据,或以正确格式pivot,然后再次绘制图表。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...