2019-08-24 运用Matplotlib annotate()函数作注解并在Subplot上绘图

运用Matplotlib annotate()函数作注解并在Subplot上绘图

首先可以看下想要实现的效果:
在这里插入图片描述
以下代码将会根据标普500指数收盘价格绘制一张曲线图,并标出2008年到2009年金融危机期间的一些重要日期。

1、导入库

from datetime import datetime
import pandas_datareader.data as web
import pandas as pd
import matplotlib.pyplot as plt

2、获取标普500指数数据

data = web.get_data_yahoo('^GSPC', start='1983-01-01', end='2019-08-22')
data.tail()
# 不妨用tail()命令了解输出的DataFrame的结构
# 需要注意从这个库中获取的数据,已经将Date作为了index

在这里插入图片描述

3、开始绘图

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

:实际上这两段代码等价于:fig,ax = plt.subplots(),它的意思是建立一个fig对象,建立一个axis对象。个人理解是就像新建一个DataFrame需要输入pd.Dataframe()一样。

# 接下来开始绘制标普500收盘价的走势,
spx = data['Close']
spx.plot(ax=ax, style='k-')

style='k-'指的是绘制黑色实线,绘制黑色虚线则是 style='k--',而 ax控制子图的位置,即 (1,1,1),详细的理解参考这篇博客的案例1:https://blog.csdn.net/huozi07/article/details/45868021,它很清楚地解释了 ax控制子图位置的功能。

# 现在开始在指数走势图上标注重要的事件
# 先罗列出一下的重要事件以及对应的事件
crisis_date = [(datetime(2007, 10, 11), 'Peak of bull market'),
               (datetime(2008, 3, 12), 'Bear Stearns Fails'),
               (datetime(2008, 9, 15), 'Lehman Bankruptcy')]

# 然后写一个循环结构,批量将事件录进绘制的途中,其中使用到了annotate()函数
for date, label in crisis_date:
    ax.annotate(label, xy=(date, spx.asof(date)+50),
                xytext=(date, spx.asof(date)+200),
                arrowprops=dict(facecolor='black'),
                horizontalalignment='left', verticalalignment='top')

:annotate()函数参数很多比较复杂,个人认为在股价走势图上简要地添加注解并不会用到太多的复杂功能,以后如果自己在绘制这方面的图中出现了其他需求将会对这篇博客中进行补充。

唯一需要注意以下五点:

  1. datelabel 是两个 Serieslabeltypestr
  2. xy代表被注释的坐标点,二维元组形如(x,y);xytext代表注释文本的坐标点,也是二维元组,如果没有写出的话,默认与xy相同
  3. asof()函数可以理解为:最后一行不是NaN值的值通俗的说:假如我有一组数据,某个点的时候这个值是NaN,那就求这个值之前最近一个不是NaN的值是多少。可以参考这篇博客的例子:https://blog.csdn.net/maymay_/article/details/80252587
  4. horizontalalignmentverticalalignment,则是控制用于标注的文本框相对于箭头位置,可以参考本例进行理解。在本例中设置为lefttop
  5. 关于arrowpropsarrowstyle的叙述,参考这篇博客:https://blog.csdn.net/leaf_zizi/article/details/82886755,可以将其与官方文档https://matplotlib.org/tutorials/text/annotations.html#id26进行对照学习。
# 放大至2007-2009
ax.set_xlim('2007-01-01', '2011-01-01')
ax.set_ylim([600, 1800])
ax.set_title('Important dates in 2008-2009 financial crisis')
plt.grid(True)
plt.show()

最后绘出的图形如下:
在这里插入图片描述

4、完整代码

# 根据标普500指数收盘价格绘制一张曲线图,并标出2008年到2009年金融危机期间的一些重要日期
# import quandl
# quandl.ApiConfig.api_key = 'iUy778LZbzD--********'
# data = quandl.get("WIKI/AAPL", start_date='2000-01-01', end_date='2019-08-22')

from datetime import datetime
import pandas_datareader.data as web
import pandas as pd
import matplotlib.pyplot as plt
# pd.set_option('display.max_rows', 5000)
pd.set_option('display.max_columns', 5000)
pd.set_option('expand_frame_repr', False)

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

# ===获取数据
data = web.get_data_yahoo('^GSPC', start='1983-01-01', end='2019-08-22')
# data['Date'] = pd.to_datetime(data['Date'])
print(data.tail())

spx = data['Close']
spx.plot(ax=ax, style='k-')

# ===事件整理
crisis_date = [(datetime(2007, 10, 11), 'Peak of bull market'),
               (datetime(2008, 3, 12), 'Bear Stearns Fails'),
               (datetime(2008, 9, 15), 'Lehman Bankruptcy')]

for date, label in crisis_date:
    ax.annotate(label, xy=(date, spx.asof(date)+50),
                xytext=(date, spx.asof(date)+200),
                arrowprops=dict(facecolor='black'),
                horizontalalignment='left', verticalalignment='top')

# 放大至2007-2009
ax.set_xlim('2007-01-01', '2011-01-01')
ax.set_ylim([600, 1800])
ax.set_title('Important dates in 2008-2009 financial crisis')
plt.grid(True)
plt.show()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值