Moh*_*esr 5 python plot matplotlib multi-index pandas
我有一个在这里采样的多索引数据帧:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
df = pd.read_csv('https://docs.google.com/uc?id=1mjmatO1PVGe8dMXBc4Ukzn5DkkKsbcWY&export=download', index_col=[0,1])
df
Run Code Online (Sandbox Code Playgroud)
我试图绘制这个['Var1', 'Var2', 'Var3', 'Var4']图,以便在一个单独的图形中的每一列,Country是一条曲线,而y-axis,和Year是x-axis
请求的数字会像这个 Ms-Excel 数字
我试图用它来绘制它
f, a = plt.subplots(nrows=2, ncols=2, figsize=(9, 12), dpi= 80)
df.xs('Var1').plot(ax=a[0])
df.xs('Var2').plot(ax=a[1])
df.xs('Var3').plot(x=a[2])
df.xs('Var4').plot(kax=a[3])
Run Code Online (Sandbox Code Playgroud)
但它给 KeyError: 'Var1'
我也尝试了以下
f, a = plt.subplots(nrows=2, ncols=2,
figsize=(7, 10), dpi= 80)
for indicator in indicators_list:
for c, country in enumerate(in_countries):
ax = df[indicator].plot()
ax.title.set_text(country + " " + indicator)
Run Code Online (Sandbox Code Playgroud)
我的试验有什么问题,我该怎么做才能得到我需要的?
如果我理解正确,您应该首先旋转您的数据框,以便将国家/地区作为列:
In [151]: df.reset_index().pivot('Year','Country','Var1').plot(ax=a[0,0], title='Var1', grid=True)
Out[151]: <matplotlib.axes._subplots.AxesSubplot at 0x127e2320>
In [152]: df.reset_index().pivot('Year','Country','Var2').plot(ax=a[0,1], title='Var2', grid=True)
Out[152]: <matplotlib.axes._subplots.AxesSubplot at 0x12f47b00>
In [153]: df.reset_index().pivot('Year','Country','Var3').plot(ax=a[1,0], title='Var3', grid=True)
Out[153]: <matplotlib.axes._subplots.AxesSubplot at 0x12f84668>
In [154]: df.reset_index().pivot('Year','Country','Var4').plot(ax=a[1,1], title='Var4', grid=True)
Out[154]: <matplotlib.axes._subplots.AxesSubplot at 0x12fbd390>
Run Code Online (Sandbox Code Playgroud)
结果: