vfe*_*raz 2 matplotlib python-3.x pandas
我有以下格式的数据
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据每年的值创建一个“区域”图表,按指标划分。
为此,我创建了一个用于汇总结果的数据透视表,如下所示:
pivot_austria = pd.pivot_table(data_austria, index=['Metric'],
columns=['Year'],
values=['Value'],
aggfunc=sum,
fill_value=0)
Run Code Online (Sandbox Code Playgroud)
它以这种格式返回数据:
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
Run Code Online (Sandbox Code Playgroud)
但是当我尝试 plot 命令时:
plot = plt.stackplot(pivot_austria.columns, pivot_austria.values, labels = pivot_austria.index)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
return np.array(data, dtype=np.unicode)
ValueError: setting an array element with a sequence
Run Code Online (Sandbox Code Playgroud)
我尝试了很多事情来绘制这个,有和没有枢轴,但到目前为止它没有工作,有人知道我可能做错了什么吗?
我不确定您尝试生成哪种图,但删除值周围的 backets 会有所帮助。
让我们先试试这个:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
或者正如@pask 在他的解决方案中所建议的那样,让 Pandas 处理它:
ax = pivot_austria.plot.area()
ax.set_xticks(pivot_austria.index)
Run Code Online (Sandbox Code Playgroud)
输出:
编辑以显示为百分比:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |