我的数据采用以下格式
import pandas as pd
import matplotlib.pyplot as plt
Metric Country Year Value
0 2G Austria 2018 1049522
1 2G Austria 2019 740746
2 2G Austria 2020 508452
3 2G Austria 2021 343667
4 2G Austria 2022 234456
65 3G Austria 2018 2133823
66 3G Austria 2019 1406927
67 3G Austria 2020 1164042
68 3G Austria 2021 1043169
69 3G Austria 2022 920025
130 4G Austria 2018 7482733
131 4G Austria 2019 8551865
132 4G Austria 2020 8982975
133 4G Austria 2021 9090997
134 4G Austria 2022 8905121
195 5G Austria 2018 0
196 5G Austria 2019 0
197 5G Austria 2020 41995
198 5G Austria 2021 188848
199 5G Austria 2022 553826
我正在尝试根据每年的值(按指标划分)创建“面积”图表。
为此,我创建了一个数据透视表来汇总结果,如下所示:
pivot_austria = pd.pivot_table(data_austria, index=['Metric'],
columns=['Year'],
values=['Value'],
aggfunc=sum,
fill_value=0)
以以下格式返回数据:
Value
Year 2018 2019 2020 2021 2022
Metric
2G 1049522 740746 508452 343667 234456
3G 2133823 1406927 1164042 1043169 920025
4G 7482733 8551865 8982975 9090997 8905121
5G 0 0 41995 188848 553826
但是当我尝试执行plot命令时:
plot = plt.stackplot(pivot_austria.columns, pivot_austria.values, labels = pivot_austria.index)
我收到错误
return np.array(data, dtype=np.unicode)
ValueError: setting an array element with a sequence
无论有无枢轴,我都尝试过很多方法来绘制此图,并且到目前为止它还没有起作用,有人知道我可能做错了吗?
答案 0 :(得分:3)
我不确定您要生成哪种图,但是删除值附近的背景会有所帮助。
让我们先尝试一下:
pivot_austria = pd.pivot_table(data_austria, index=['Metric'],
columns=['Year'],
values='Value',
aggfunc=sum,
fill_value=0)
plt.stackplot(pivot_austria.columns, pivot_austria.values, labels = pivot_austria.index)
ax = plt.gca()
ax.set_xticks(pivot_austria.columns)
输出:
或者就像@pask在他的解决方案中建议的那样,让熊猫来处理它:
ax = pivot_austria.plot.area()
ax.set_xticks(pivot_austria.index)
输出:
编辑以百分比显示:
ax = (pivot_austria / pivot_austria.sum(1).max()).plot.area()
ax.set_xticks(pivot_austria.index)
ax.set_yticklabels(['{:,.2%}'.format(x) for x in ax.get_yticks()])
ax.set_ylim(0,1)
输出:
答案 1 :(得分:2)
熊猫已经包括绘制区域图的简便方法
尝试:
pivot_austria.T.plot.area(xticks=pivot_austria.T.index)