绘制股票图表

3

我刚刚开始学习Python/Pandas,并编写了以下代码来绘制标准普尔500指数。

from pandas.io.data import DataReader
# returns a DataFrame
sp500 = DataReader("^GSPC", "yahoo", start=datetime.datetime(1990, 1, 1))
sp500.plot(figsize = (12,8))

看起来这是在一个图表上绘制了最高价、最低价、开盘价、收盘价、调整后的收盘价和成交量。有没有一种简单的方法只在一个图表中绘制调整后的收盘价,然后在其下方绘制成交量,就像雅虎和其他大多数金融网站所做的那样?我还对绘制OHLC蜡烛图表的示例很感兴趣。


2
DataReader在pandas中已经不再使用。您需要安装pandas_datareader包才能继续使用它。 - karlacio
2个回答

3
请看这里获取我对类似问题的答案,以及这里获取有关mathplotlib金融蜡烛图的更多信息。
如果只想得到sp500的收盘价,可以使用类似sp500["Adj Close"]的语句,然后将其传递给相关的matplotlib绘图命令plt.plot(datelist, sp500["Adj Close"] ),其中datelist是x轴上日期的列表。
我认为你可以通过引用sp500.index来获取datelist,请参阅此处以获取更多信息。
至于将它传递给绘图命令的问题,可以考虑使用如下代码: datelist = [date2num(x) for x in sp500.index] 其中函数date2num来自matplotlib.dates包。在设置了相关的子图之后,调用适当的fill命令来填充线条下面的区域,就像你链接的Yahoo图表一样。
请参见此处填充和透明度标题下的另一个代码片段,显示了一个带有正确日期打印的填充线图。
最初的链接包含了一个样本matplotlib代码片段,也更详细地涵盖了日期格式和格式化等内容。

谢谢你提供的信息 :-) 你知道我怎么从sp500数据框中获取datelist吗?我还没有弄清楚。 - Ben McCann
我看到你建议我可以引用sp500.index来获取日期列表。我尝试使用plt.plot(sp500.index, sp500["adj clos"]),但出现了错误:ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (63, 0)) - Ben McCann
实际上,它似乎卡住的是 sp500["adj clos"]。 - Ben McCann
好的,问题解决了。是因为大小写不对。sp500["Adj Close"]可以使用。 - Ben McCann

0

这将为您提供一个仅包含DataFrame(日期)的指数与Adj Close列的绘图。

from pandas.io.data import DataReader
sp500 = DataReader("^GSPC", "yahoo", start=datetime.datetime(1990, 1, 1)) 
close = sp500['Adj Close']
close.plot()
plt.show()

同样地,您可以以相同的方式绘制体积:
vol = sp500['Volume']
vol.plot()
plt.show()

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