我从模拟中获取了数据,这些数据为我提供了存储在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中,只需用一个命令将两个图形绘制成一个图形就不可能了?
答案 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>
样本面板的不同切片/索引/选择示例:
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()