绘制三条线 - 每个符号一条线,每个日期

时间:2016-05-04 18:56:55

标签: python pandas matplotlib plot

  

绘制三条线 - 每个符号一条线,每个日期

import pandas as pd
import matplotlib.pyplot as plt

           symbol    price    interest
Date

2016-04-22  AAPL    445.50      0.00
2016-04-22  GOOG    367.02     21.52
2016-04-22  MSFT    248.94      3.44

2016-04-15  AAPL    425.51      0.00
2016-04-15  GOOG    338.57     13.06
2016-04-15  MSFT    226.66      1.15

目前我将数据框分成三个不同的框架:

df1 = df[df.symbol == 'AAPL']
df2 = df[df.symbol == 'GOOG']
df3 = df[df.symbol == 'MSFT']

然后我绘制它们:

plt.plot(df1.index, df1.price.values, 
         df2.index, df2.price.values, 
         df3.index, df3.price.values)

是否可以直接从数据框中绘制这三个符号的价格?

2 个答案:

答案 0 :(得分:0)

试试这个:

ax = df[df.symbol=='AAPL'].plot()

df[df.symbol=='GOOG'].plot(ax=ax)

df[df.symbol=='MSFT'].plot(ax=ax)

plt.show()

答案 1 :(得分:0)

# Create sample data.
np.random.seed(0)
df = pd.DataFrame(np.random.randn(100, 3), columns=list('ABC'), index=pd.date_range('2016-1-1', periods=100)).cumsum().reset_index().rename(columns={'index': 'date'})
df = pd.melt(df, id_vars='date', value_vars=['A', 'B', 'C'], value_name='price', var_name='symbol')
df['interest'] = 100
>>> df.head()
        date symbol     price  interest
0 2016-01-01      A  1.764052       100
1 2016-01-02      A  4.004946       100
2 2016-01-03      A  4.955034       100
3 2016-01-04      A  5.365632       100
4 2016-01-05      A  6.126670       100

# Generate plot.
plot_df = (df.loc[df.symbol.isin(['A', 'B', 'C']), ['date', 'symbol', 'price']]
           .set_index(['symbol', 'date'])
           .unstack('symbol'))
plot_df.columns = plot_df.columns.droplevel()
>>> plot_df.plot())

enter image description here