Python Pandas plot multiindex指定x和y

时间:2016-09-30 11:04:27

标签: python pandas plot

以下是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)

1 个答案:

答案 0 :(得分:3)

只需使用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)

输出:

enter image description here