LKM LKM - 9 months ago 46
Python Question

Python Pandas plot using dataframe column values

I'm trying to plot a graph using dataframes.

I'm using 'pandas_datareader' to get the data.

so my code is below:

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)


So in the variable 'data , there are 8 columns = ['Date', 'Open', 'High' ,'Low' ,'Close' 'Volume', 'Adj Close','name']

The variable 'data' is shown below:
enter image description here


What I want to do is to plot a graph taking 'date' values as
x-parameter , 'high' as y-parameter with multiple columns as 'name'
column values(=["AAPL","GOOG","MSFT","XOM","BRK-A","FB","JNJ","GE","AMZN","WFC"]).


How can I do this?

When i executed 'data.plot()', the result takes 'data' as x-parameter well but there are 5 columns ['open','high','low','close','volume','adj close'] not 7 columns ["AAPL","GOOG","MSFT","XOM","BRK-A","FB","JNJ","GE","AMZN","WFC"] : what i want to do.
The result is below:
enter image description here

Answer Source

You need to reshape your data so that the names become the header of the data frame, here since you want to plot High only, you can extract the High and name columns, and transform it to wide format, then do the plot:

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()

enter image description here

ax = high.plot(figsize = (16, 10))

enter image description here