下面是一个示例 DataFrame
.
joaquin manolo
xx 0 0.000000e+00 44.000000
1 1.570796e+00 52.250000
2 3.141593e+00 60.500000
3 4.712389e+00 68.750000
4 6.283185e+00 77.000000
yy 0 0.000000e+00 37.841896
1 2.078796e+00 39.560399
2 5.292179e-17 41.026434
3 -8.983291e-02 42.304767
4 -4.573916e-18 43.438054
可以看到,行索引有两个级别,['xx', 'yy']
和[0, 1, 2, 3, 4]
。我要调用DataFrame.plot()
这样它将产生两个子图,一个子图为 joaquin
和一个 manolo
,以及我可以指定使用 data.loc["xx", :]
的位置对于域数据并使用 data.loc["yy", :]
为纵坐标数据。此外,我希望可以选择在 matplotlib.axes._subplots.AxesSubplot
的列表(或数组)中提供应在其上绘制图的子图。实例,例如那些可以由 DataFrame.hist()
返回的实例方法。如何做到这一点?
生成上述数据
以防万一您想知道,下面是我用来生成数据的代码。如果有一种更简单的方法来生成这些数据,我很想知道作为旁注。
joaquin_dict = {}
xx_joaquin = numpy.linspace(0, 2*numpy.pi, 5)
yy_joaquin = 10 * numpy.sin(xx_joaquin) * numpy.exp(-xx_joaquin)
for i in range(len(xx_joaquin)):
joaquin_dict[("xx", i)] = xx_joaquin[i]
joaquin_dict[("yy", i)] = yy_joaquin[i]
manolo_dict = {}
xx_manolo = numpy.linspace(44, 77, 5)
yy_manolo = 10 * numpy.log(xx_manolo)
for i in range(len(xx_manolo)):
manolo_dict[("xx", i)] = xx_manolo[i]
manolo_dict[("yy", i)] = yy_manolo[i]
data_dict = {"joaquin": joaquin_dict, "manolo": manolo_dict}
data = pandas.DataFrame.from_dict(data_dict)
最佳答案
只需使用 for 循环:
fig, axes = pl.subplots(1, 2)
for ax, col in zip(axes, data.columns):
data[col].unstack(0).plot(x="xx", y="yy", ax=ax, title=col)
输出:
关于Python Pandas 绘制多索引指定 x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790041/