使用数据框列值的 Python Pandas 绘图

LKM*_*LKM 5 python plot numpy yahoo-finance pandas

我正在尝试使用数据框绘制图表。

我正在使用“pandas_datareader”来获取数据。

所以我的代码如下:

tickers = ["AAPL","GOOG","MSFT","XOM","BRK-A","FB","JNJ","GE","AMZN","WFC"]
import pandas_datareader.data as web
import datetime as dt
end = dt.datetime.now().strftime("%Y-%m-%d")
start = (dt.datetime.now()-dt.timedelta(days=365*3)).strftime("%Y-%m-%d")
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
data = []
for ticker in tickers:
    sub_df = web.get_data_yahoo(ticker, start, end)
    sub_df["name"] = ticker
    data.append(sub_df)
data = pd.concat(data)
Run Code Online (Sandbox Code Playgroud)

所以在变量 中data,有 8 列 =['Date', 'Open', 'High' ,'Low' ,'Close' 'Volume', 'Adj Close','name']

变量“data”如下所示: 在此输入图像描述

我想要做的是绘制一个图表,将“日期”值作为 x 参数,将“高”值作为 y 参数,将多列作为“名称”列值(=["AAPL","GOOG","MSFT" 、“XOM”、“BRK-A”、“FB”、“JNJ”、“GE”、“AMZN”、“WFC”])。

我怎样才能做到这一点?

当我执行时data.plot(),结果data很好地作为 x 参数,但有 5 列['open','high','low','close','volume','adj close']而不是 7 列["AAPL","GOOG","MSFT","XOM","BRK-A","FB","JNJ","GE","AMZN","WFC"]:我想要做什么。结果如下: 在此输入图像描述

Psi*_*dom 4

您需要重塑数据,使名称成为数据框的标题,因为您High只想绘图,所以可以提取Highname列,并将其转换为宽格式,然后进行绘图:

import matplotlib as mpl
mpl.rcParams['savefig.dpi'] = 120

high = data[["High", "name"]].set_index("name", append=True).High.unstack("name")

# notice here I scale down the BRK-A column so that it will be at the same scale as other columns
high['BRK-A'] = high['BRK-A']/1000
high.head()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ax = high.plot(figsize = (16, 10))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述