从Panel中的各种DataFrame中绘制相同的列

时间:2017-04-20 12:31:41

标签: python pandas dataframe plot panel

我从模拟中获取了数据,这些数据为我提供了存储在DataFrame(100行x 6列)中的一些值。对于不同的起始值,我将数据保存在Panel中(2个DataFrames x 100行x 6列)。

现在我要比较名为' A'的列。在两个模拟中(DataFrames命名为' Sim1'和#39; Sim2')比较,一种方法是通过DataFrame.plot命令

Panel['Sim1'].plot(x = 'xvalues', y='A')
Panel['Sim2'].plot(x = 'xvalues', y='A')
plt.show()

这有效,但我觉得应该可以以某种方式将da数据绘制在相同的DataFrame中,我可以像这样绘制

DataFrame.plot(x = 'xvalues', y = ['A1', 'A2'])

我是否遗漏了某些内容,或者如果数据存储在Panel中,只需用一个命令将两个图形绘制成一个图形就不可能了?

2 个答案:

答案 0 :(得分:1)

考虑以下示例:

In [77]: import pandas_datareader.data as web

In [78]: p = web.DataReader(['AAPL','GOOGL'], 'yahoo', '2017-01-01')

In [79]: p.axes
Out[79]:
[Index(['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'], dtype='object'),
 DatetimeIndex(['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
                '2017-01-13', '2017-01-17', '2017-01-18', '2017-01-19', '2017-01-20', '2017-01-23', '2017-01-24', '2017-01-25',
                '2017-01-26', '2017-01-27', '2017-01-30', '2017-01-31', '2017-02-01', '2017-02-02', '2017-02-03', '2017-02-06',
                '2017-02-07', '2017-02-08', '2017-02-09', '2017-02-10', '2017-02-13', '2017-02-14', '2017-02-15', '2017-02-16',
                '2017-02-17', '2017-02-21', '2017-02-22', '2017-02-23', '2017-02-24', '2017-02-27', '2017-02-28', '2017-03-01',
                '2017-03-02', '2017-03-03', '2017-03-06', '2017-03-07', '2017-03-08', '2017-03-09', '2017-03-10', '2017-03-13',
                '2017-03-14', '2017-03-15', '2017-03-16', '2017-03-17', '2017-03-20', '2017-03-21', '2017-03-22', '2017-03-23',
                '2017-03-24', '2017-03-27', '2017-03-28', '2017-03-29', '2017-03-30', '2017-03-31', '2017-04-03', '2017-04-04',
                '2017-04-05', '2017-04-06', '2017-04-07', '2017-04-10', '2017-04-11', '2017-04-12', '2017-04-13', '2017-04-17',
                '2017-04-18', '2017-04-19', '2017-04-20', '2017-04-21'],
               dtype='datetime64[ns]', name='Date', freq=None),
 Index(['AAPL', 'GOOGL'], dtype='object')]

In [80]: p.loc['Adj Close']
Out[80]:
                  AAPL       GOOGL
Date
2017-01-03  115.648597  808.010010
2017-01-04  115.519154  807.770020
2017-01-05  116.106611  813.020020
2017-01-06  117.401002  825.210022
2017-01-09  118.476334  827.179993
2017-01-10  118.595819  826.010010
2017-01-11  119.233055  829.859985
2017-01-12  118.735214  829.530029
2017-01-13  118.526121  830.940002
2017-01-17  119.481976  827.460022
...                ...         ...
2017-04-07  143.339996  842.099976
2017-04-10  143.169998  841.700012
2017-04-11  141.630005  839.880005
2017-04-12  141.800003  841.460022
2017-04-13  141.050003  840.179993
2017-04-17  141.830002  855.130005
2017-04-18  141.199997  853.989990
2017-04-19  140.679993  856.510010
2017-04-20  142.440002  860.080017
2017-04-21  142.270004  858.950012

[76 rows x 2 columns]

绘制它

In [81]: p.loc['Adj Close'].plot()
Out[81]: <matplotlib.axes._subplots.AxesSubplot at 0xdabfda0>

enter image description here

样本面板的不同切片/索引/选择示例:

In [118]: p
Out[118]:
<class 'pandas.core.panel.Panel'>
Dimensions: 6 (items) x 76 (major_axis) x 2 (minor_axis)
Items axis: Open to Adj Close
Major_axis axis: 2017-01-03 00:00:00 to 2017-04-21 00:00:00
Minor_axis axis: AAPL to GOOGL

按项目轴(索引):

In [119]: p.loc['Adj Close']
Out[119]:
                  AAPL       GOOGL
Date
2017-01-03  115.648597  808.010010
2017-01-04  115.519154  807.770020
2017-01-05  116.106611  813.020020
2017-01-06  117.401002  825.210022
2017-01-09  118.476334  827.179993
2017-01-10  118.595819  826.010010
2017-01-11  119.233055  829.859985
2017-01-12  118.735214  829.530029
2017-01-13  118.526121  830.940002
2017-01-17  119.481976  827.460022
...                ...         ...
2017-04-07  143.339996  842.099976
2017-04-10  143.169998  841.700012
2017-04-11  141.630005  839.880005
2017-04-12  141.800003  841.460022
2017-04-13  141.050003  840.179993
2017-04-17  141.830002  855.130005
2017-04-18  141.199997  853.989990
2017-04-19  140.679993  856.510010
2017-04-20  142.440002  860.080017
2017-04-21  142.270004  858.950012

[76 rows x 2 columns]

按主轴:

In [120]: p.loc[:, '2017-01-03']
Out[120]:
             Open        High         Low       Close      Volume   Adj Close
AAPL   115.800003  116.330002  114.760002  116.150002  28781900.0  115.648597
GOOGL  800.619995  811.440002  796.890015  808.010010   1959000.0  808.010010

按短轴:

In [121]: p.loc[:, :, 'GOOGL']
Out[121]:
                  Open        High         Low       Close     Volume   Adj Close
Date
2017-01-03  800.619995  811.440002  796.890015  808.010010  1959000.0  808.010010
2017-01-04  809.890015  813.429993  804.109985  807.770020  1515300.0  807.770020
2017-01-05  807.500000  813.739990  805.919983  813.020020  1340500.0  813.020020
2017-01-06  814.989990  828.960022  811.500000  825.210022  2017100.0  825.210022
2017-01-09  826.369995  830.429993  821.619995  827.179993  1406800.0  827.179993
2017-01-10  827.070007  829.409973  823.140015  826.010010  1194500.0  826.010010
2017-01-11  826.619995  829.900024  821.469971  829.859985  1320200.0  829.859985
2017-01-12  828.380005  830.380005  821.010010  829.530029  1349500.0  829.530029
2017-01-13  831.000000  834.650024  829.520020  830.940002  1288000.0  830.940002
2017-01-17  830.000000  830.179993  823.200012  827.460022  1439700.0  827.460022
...                ...         ...         ...         ...        ...         ...
2017-04-07  845.000000  845.880005  837.299988  842.099976  1110000.0  842.099976
2017-04-10  841.539978  846.739990  840.789978  841.700012  1021200.0  841.700012
2017-04-11  841.700012  844.630005  834.599976  839.880005   971900.0  839.880005
2017-04-12  838.460022  843.719971  837.590027  841.460022  1126100.0  841.460022
2017-04-13  841.039978  843.729980  837.849976  840.179993  1067200.0  840.179993
2017-04-17  841.380005  855.640015  841.030029  855.130005  1044800.0  855.130005
2017-04-18  852.539978  857.390015  851.250000  853.989990   935200.0  853.989990
2017-04-19  857.390015  860.200012  853.530029  856.510010  1077500.0  856.510010
2017-04-20  859.739990  863.929993  857.500000  860.080017  1186900.0  860.080017
2017-04-21  860.619995  862.440002  857.729980  858.950012  1168200.0  858.950012

[76 rows x 6 columns]

在您的情况下(取决于您的轴),您可能希望以不同方式对Panel进行切片:

Panel.loc[:, :, 'A'].plot()

答案 1 :(得分:0)

这是一种使用Panel.apply()的方法 apply(plt.plot)的输出是Line2D对象的minor_axis - { - 1}}数据框。 items尝试绘制一个对我们的目的没有意义的额外维度,但我们可以使用plot()来删除有问题的维度。希望这会有所帮助。

lines.pop()

panel plot