从面板中的各种数据框绘制同一列

从面板中的各种数据框绘制同一列

问题描述:

我已经从模拟中获得数据,该数据给了我存储在DataFrame中的一些值(100行x 6列)。对于不同的起始值,我将数据保存在面板中(2个DataFrames×100行×6列)。从面板中的各种数据框绘制同一列

现在我想比较评为“A”在两个模拟(DataFrames命名为“SIM1”和“SIM2”)列如何比较和做的一个方法是通过DataFrame.plot命令

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

这工作,但我觉得它在某种程度上应该是可以绘制像大数据是相同的数据帧在那里我可以画出这样

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

我缺少的东西,或只是可能仅仅积两如果数据存储在面板中,则用一个命令将其绘制成一个图形?

+0

请印刷后的'输出(面板)'' – MaxU

+0

尺寸:2(项)×101(major_axis)×5(minor_axis) 物品轴:1至2个 major_axis轴:0〜100个 Minor_axis轴:x至A4' – theGwiel

考虑下面的例子:

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

不同SL的实例除冰/索引/选择用于所述样品面板:

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.loc[:, :, 'A'].plot() 
+0

当然,我没有想到,不是每次模拟都使用完整的DataFrame和所有数据,我可以使用次轴来确定模拟计数,从而生成一个Panel。完善!现在我只需要找到一种方法来优雅地创建这样一个面板并添加到它。我之前的做法是计算每个时间步长的每个值,并将这个时间步长追加到我现有的DataFrame中以进行这种非常模拟。这仍然有效,但是我相比于一个numpy数组赢不了任何东西,因为我必须为每个DataFrame(yvalues A1到A4)追加自己 - 甚至更多的yvalues? – theGwiel

+0

我做了,但因为我有不到15点,它没有出现公众 \编辑:不知道接受选项 - 谢谢:) – theGwiel

+0

@theGwiel,谢谢你接受一个答案!如果你打开一个带有示例数据集的新问题,请从这个问题ping我 - 我会尝试提供一个工作示例 – MaxU

以下是一种使用Panel.apply()的方法。
apply(plt.plot)的输出是Line2D对象的数据帧的minor_axis-itemsplot()试图绘制一个对我们的目的没有意义的额外维度,但我们可以使用lines.pop()来删除违规维度。希望这可以帮助。

# generate sample data 
x = np.arange(20) 
y1 = np.random.randint(100, size=20) 
y2 = np.random.randint(100, size=20) 
data = {'A1': pd.DataFrame({'y':y1,'x':x}), 
     'A2': pd.DataFrame({'y':y2,'x':x})} 
p = pd.Panel(data) 

# plot panels 
df = p.apply(plt.plot) 
df.ix[0,0].axes.lines.pop(2) 
df.ix[0,0].axes.lines.pop(0) 
df.ix[0,0].axes.legend(loc="lower right") 

panel plot

+0

这是解决一个奇怪的方式问题,特别是在处理多列时......在我的情况下,您的方法似乎是012f'df.ix [0,0] .axes.lines.pop(1).pop(2).pop(3)。 pop(4)' ? – theGwiel