在iPython/pandas中绘制多条线会生成多个图表

7

我正在尝试理解matplotlib的状态机模型,但是当我尝试在单个图上绘制多条线时遇到了错误。据我所知,以下代码应该产生一个带有两条线的单个图:

import pandas as pd
import pandas.io.data as web
aapl = web.get_data_yahoo('AAPL', '1/1/2005')

# extract adjusted close
adj_close = aapl.loc[:, ['Adj Close']]

# 2 lines on one plot
hold(False)
adj_close.resample('M', how='min').plot()
adj_close.resample('M', how='max').plot()

实际上,我得到了三个图形:第一个是空的,然后还有两个,每个都只有一条线。
任何想法我做错了什么,或者我的系统可能配置不正确?

1
matplotlib 状态机基本上就是魔鬼。 - 8one6
1个回答

13
你可以使用 matplotlib 的 pyplot 包预先创建一个坐标轴对象,然后将图形附加到该坐标轴对象上:
import pandas as pd
import pandas.io.data as web
import matplotlib.pyplot as plt

aapl = web.get_data_yahoo('AAPL', '1/1/2005')

# extract adjusted close
adj_close = aapl.loc[:, ['Adj Close']]

# 2 lines on one plot
#hold(False)

fig, ax = plt.subplots(1, 1)
adj_close.resample('M', how='min').plot(ax=ax)
adj_close.resample('M', how='max').plot(ax=ax)

示例图

或者,您可以将这两个序列连接成一个 m x 2 的数据框(DataFrame),然后绘制数据框:

s1 = adj_close.resample('M', how='min')
s2 = adj_close.resample('M', how='max')
df = pd.concat([s1, s2], axis=1)
df.plot()

太棒了!它得到了我想要的行为,我特别喜欢它使图形和坐标轴对象变得明确。 - BringMyCakeBack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接