python 画图 线标注_最简洁的Python时间序列可视化实现

7d04334c9a696f0c331392f50182e1c3.png

TUSHARE  金融与技术学习兴趣小组 

翻译整理、编辑 | 一只小绿怪兽

译者简介:北京第二外国语学院国际商务专业研一在读,目前在学习Python编程和量化投资相关知识。

作者:DataCamp

时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等。

学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律。

本文会利用Python中的matplotlib【1】库,并配合实例进行讲解。matplotlib库是⼀个⽤于创建出版质量图表的桌⾯绘图包(2D绘图库),是Python中最基本的可视化工具。

【工具】Python 3

【数据】Tushare

【注】示例注重的是方法的讲解,请大家灵活掌握。

01

单个时间序列

首先,我们从tushare.pro获取指数日线行情数据,并查看数据类型。

import tushare as ts
import pandas as pd


pd.set_option('expand_frame_repr', False)  # 显示所有列
ts.set_token('your token')
pro = ts.pro_api()

df = pro.index_daily(ts_code='399300.SZ')[['trade_date', 'close']]
df.sort_values('trade_date', inplace=True) 
df.reset_index(inplace=True, drop=True)

print(df.head())

  trade_date    close
0   20050104  982.794
1   20050105  992.564
2   20050106  983.174
3   20050107  983.958
4   20050110  993.879

print(df.dtypes)

trade_date     object
close         float64
dtype: object

交易时间列'trade_date' 不是时间类型,而且也不是索引,需要先进行转化。

df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)

print(df.head())

              close
trade_date         
2005-01-04  982.794
2005-01-05  992.564
2005-01-06  983.174
2005-01-07  983.958
2005-01-10  993.879

接下来,就可以开始画图了,我们需要导入matplotlib.pyplot【2】,然后通过设置set_xlabel()set_xlabel()为x轴和y轴添加标签。

import matplotlib.pyplot as plt


ax = df.plot(color='')
ax.set_xlabel('trade_date')
ax.set_ylabel('399300.SZ close')
plt.show()

82f23fdf6cea97527ec6d288645750b7.png

matplotlib库中有很多内置图表样式可以选择,通过打印plt.style.available查看具体都有哪些选项,应用的时候直接调用plt.style.use('fivethirtyeight')即可。

print(plt.style.available)

['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

plt.style.use('fivethirtyeight')
ax1 = df.plot()
ax1.set_title('FiveThirtyEight Style')
plt.show()

c49fff0bf2cf6028836ecf434ebd14d0.png

02

设置更多细节

上面画出的是一个很简单的折线图,其实可以在plot()里面通过设置不同参数的值,为图添加更多细节,使其更美观、清晰。

figsize(width, height)设置图的大小,linewidth设置线的宽度,fontsize设置字体大小。然后,调用set_title()方法设置标题。

ax = df.plot(color='blue', figsize=(8, 3), linewidth=2, fontsize=6)
ax.set_title('399300.SZ close from 2005-01-04 to 2019-07-04', fontsize=8)
plt.show()

7d0072c3a9be769c3c9b62df24e8d231.png

如果想要看某一个子时间段内的折线变化情况,可以直接截取该时间段再作图即可,如df['2018-01-01': '2019-01-01']

df_subset_1 = df['2018-01-01':'2019-01-01']
ax = df_subset_1.plot(color='blue', fontsize=10)
plt.show()

67506efc786bb2b47b2f52a1fda408db.png

如果想要突出图中的某一日期或者观察值,可以调用.axvline().axhline()方法添加垂直和水平参考线。

ax = df.plot(color='blue', fontsize=6)
ax.axvline('2019-01-01', color='red', linestyle='--')
ax.axhline(3000, color='green', linestyle='--')
plt.show()

630e8d2aa46097ed12248ec15e9e6c08.png

也可以调用axvspan()的方法为一段时间添加阴影标注,其中alpha参数设置的是阴影的透明度,0代表完全透明,1代表全色。

ax = df.plot(color='blue', fontsize=6)
ax.axvspan('2018-01-01', '2019-01-01', color='red', alpha=0.3)
ax.axhspan(2000, 3000, color='green', alpha=0.7)
plt.show()

b1124d4c843c516dde1d10e5cba34e22.png

03

移动平均时间序列

有时候,我们想要观察某个窗口期的移动平均值的变化趋势,可以通过调用窗口函数rolling来实现。下面实例中显示的是,以250天为窗口期的移动平均线close,以及与移动标准差的关系构建的上下两个通道线upper和lower。

ma = df.rolling(window=250).mean()
mstd = df.rolling(window=250).std()

ma['upper'] = ma['close'] + (mstd['close'] * 2)
ma['lower'] = ma['close'] - (mstd['close'] * 2)

ax = ma.plot(linewidth=0.8, fontsize=6)
ax.set_xlabel('trade_date', fontsize=8)
ax.set_ylabel('399300.SZ close from 2005-01-04 to 2019-07-04', fontsize=8)
ax.set_title('Rolling mean and variance of 399300.SZ cloe from 2005-01-04 to 2019-07-04', fontsize=10)
plt.show()

6472b8322ff9dfaa803fdf654774e771.png

04

多个时间序列

如果想要可视化多个时间序列数据,同样可以直接调用plot()方法。示例中我们从tushare.pro上面选取三只股票的日线行情数据进行分析。

# 获取数据
code_list = ['000001.SZ', '000002.SZ', '600000.SH']
data_list = []
for code in code_list:
    print(code)
    df = pro.daily(ts_code=code, start_date='20180101', end_date='20190101')[['trade_date', 'close']]
    df.sort_values('trade_date', inplace=True)
    df.rename(columns={'close': code}, inplace=True)
    df.set_index('trade_date', inplace=True)
    data_list.append(df)
df = pd.concat(data_list, axis=1)
print(df.head())

000001.SZ
000002.SZ
600000.SH
            000001.SZ  000002.SZ  600000.SH
trade_date                                 
20180102        13.70      32.56      12.72
20180103        13.33      32.33      12.66
20180104        13.25      33.12      12.66
20180105        13.30      34.76      12.69
20180108        12.96      35.99      12.68

# 画图
ax = df.plot(linewidth=2, fontsize=12)
ax.set_xlabel('trade_date')
ax.legend(fontsize=15)
plt.show()
6a8a2ac47f21b98d37c31c01e3fd909c.png

调用.plot.area()方法可以生成时间序列数据的面积图,显示累计的总数。

ax = df.plot.area(fontsize=12)
ax.set_xlabel('trade_date')
ax.legend(fontsize=15)
plt.show()

a8760ef54b4b862285fd35bd41d1df3b.png

如果想要在不同子图中单独显示每一个时间序列,可以通过设置参数subplots=True来实现。layout指定要使用的行列数,sharexsharey用于设置是否共享行和列,colormap='viridis' 为每条线设置不同的颜色。

df.plot(subplots=True,
          layout=(2, 2),
          sharex=False,
          sharey=False,
          colormap='viridis',
          fontsize=7,
          legend=False,
          linewidth=0.3)

plt.show()

76d738770cc5e606dd73d7d1ffecb99e.png

05

总结

本文主要介绍了如何利用Python中的matplotlib库对时间序列数据进行一些简单的可视化操作,包括可视化单个时间序列并设置图中的细节,可视化移动平均时间序列和多个时间序列。

相关的官方文档和参考资料已附下面,感兴趣的话可以自行查阅更多内容!

6fb9485bca7ae0939342f6d69a999402.png

END

更多内容请关注“挖地兔”公众号。

0eb46a40cf29314dcf46d4813ae30d05.png【参考链接】

https://matplotlib.org/【1】

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot【2】

https://www.datacamp.com/courses/visualizing-time-series-data-in-python【Datacamp】【扩展阅读】

Pandas必备技能之“分组聚合操作”

Pandas必备技能之“花式拼接表格”

Pandas必备技能之“时间序列数据处理”

Python+SQL无敌组合,值得你Pick!

如何正确使用Pandas库提升项目的运行速度?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux伙伴系统接口,Linux伙伴系统(一)--伙伴系统的概述

伙伴系统的概述Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种&#xff1…

linux 集群 lvs,linux集群--LVS集群

拓扑图:1、LVS配置脚本:需要安装:ipvsadm-1.24-10.i386.rpmvi /etc/rc.d/init.d/lvsdr#!/bin/bashvip192.168.0.116web1192.168.0.104web2192.168.0.114./etc/rc.d/init.d/functionscase "$1" instart)echo "startlvs-dr&quo…

服务器连接工具mat_将个人笔记本改造成Linux简易服务器

实验过程1、开启Ubuntu系统的ssh服务开启之后其他电脑就可以通过ssh登录Ubuntu服务器,通过安装openssh-server就可以达到目的。(1)查看主机有没有ssh服务在Ubuntu系统桌面右击后点击“打开终端”,输入一下命令:ssh localhost若出现&#xff1…

以下对c语言函数的描述中正确的是,以下对C语言函数的有关描述中,正确的是

摘要:它决习定于的学后天,下语密切关系的能与社力是会文化有。关描透性的是起渗利尿可引。认的r默链接路径是(,述中在建点时立站。...它决习定于的学后天,下语密切关系的能与社力是会文化有。函数人感型的偏好感受觉很丰富。关描透…

创建前缀一样的文件_SpringBoot:配置文件属性读取

SpringBoot中默认加载的是application.properties或者application.yaml文件,当然也支持自定义的属性文件。我们可以在此文件中写一些自己想要的配置信息,然后在用的地方读取。默认属性文件在application.properties文件中添加配置信息,如下&a…

c语言 算术平均滤波法_单片机数字滤波的算法

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。在单片机进行数据采集时,会遇…

参数 携带 跳转_微信小程序:页面跳转及参数传递

本文首发自个人自有博客:【FaxMiao个人博客】,一个关注Web前端开发技术、关注用户体验、记录前端点滴,坚持更多原创,为大家提供高质量技术博文!前言小程序的跳转方法有很多种,有的人一直只用wx.navigateTo跳…

android fragment 管理器,Android Fragment 與 Fragment管理器

Android Fragment 與 Fragment管理器首先談談Fragement的需求過去開發人員認為界面之間的跳轉只需要使用多個activity組成就行了;例如下圖中,在Activity-A管理的界面中單擊按鈕后,Activity-A響應事件並啟動Activity-B;而用戶在單擊…

android 手机 报证书错误,Android设备中的SSL证书错误

了解网络科技近年来高速增长,对人们日常生活的影响可通过PC端和移动设备的使用增长数据可以推断。在数字化技术的今天,用户也希望能够在移动设备上保护网站的信息以及用户的数据。SSL证书是保护网站信息的安全协议,也是目前互联网站点必备的安…

手机调试_手机充值不好用?因为正在调试期

“嘀,余额不足,请充值”我们在乘坐公交车的时候,经常会遇到这种情况,上车才发现余额不足,下班又没时间去给公交卡充值,给生活带来了很大的不便,难道就没有更加方便快捷的方法吗?比如…

七参数 布尔萨 最小二乘法_最小二乘法和最大似然法的联系

目录最小二乘法概念最大似然法概念两者的联系总结一、最小二乘法概念最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际…

android 浮动按钮拖拽,小程序拖拽浮动按钮

小程序拖拽浮动按钮2019-5-22 分类: 小程序小程序 浮动 拖拽 按钮不借助movable-area自带的组件,实现拖拽效果wxmljs:var startPoint;Page({data: {buttonTop: 0,buttonLeft: 0,windowHeight: ,windowWidth: },onLoad: function (options) {var that…

android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)

APP UI Automation Framework一个基于 Appium 1.8.1、TestNG,Page Object 模式开发的 UI 自动化测试框架介绍文档结构图基本功能每秒生成一次截图通过 xml 配置待执行的测试用例通过 yml 指定待执行测试的设备及 Appium 端口用例执行失败自动重试,且重试…

长虹android电视安装apk,长虹电视通过安卓手机安装沙发管家教程

‍本文教程适用于长虹电视LED39(48/50/55)C 2080i等相类似型号;【安装步骤简介】安卓手机安装沙发管家手机版--手机和智能电视/盒子用同一个路由器连接--沙发管家手机版推送安装【操作方法详情】1、使用您的安卓手机下载并安装沙发管家手机版:http://pub…

1使用技巧_新版PubMed使用技巧1

以下分享适合小白,高手请绕路。PubMed是许多医学生以及科研人员必备的检索系统,高效的利用PubMed可以节省很多时间。本文从以下几个方面简单讲解新版PubMed的使用技巧1:1、PubMed基本介绍;2、PubMed的高级检索。后期分享使用技巧2…

html复选框打钩行变颜色,Excel 单元格打勾会变颜色,开发工具的复选框这样玩...

Excel中的复选框除了打钩,打叉之外还有什么其他功能吗?其实,这里面的学问可多了,可造之物也非常之多。今天,我就利用复选框来教大家制作一个特别的表格,在复选框中打钩的后,单元格的颜色就会随着…

js怎么图表在html中显示不出来的,基于Echarts图表在div动态切换时不显示的解决方式...

简单粗暴,先上图,大概长这样:在使用vue时有遇到像上图下拉框change事件切换div,change切完后大概会变成这个样子:上代码:{{ option.text }}{{selected}}export default{name:"test",data(){retur…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为,UML中最重要的图之一。 而且序列图,对于业务建模,也有非常好…

如何创建计算机的桌面快捷方式,怎么设置桌面快捷方式,怎么创建快捷方式到桌面...

很多win7系统用户反映说遇到这样一个问题,就是电脑上从文件服务器创建的快捷方式就会自动被删除,自己重新创建之后,过几天重新启动win7系统的时候,那些快捷方式又会自动被删除不见了,怎么办呢,下面以win7 3…

福师计算机应用基础在线作业二及答,福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx...

福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx 计算机应用基础计算机应用基础1 1 单选题单选题1 下列软件中属于应用软件的是() D A 操作系统B 编译程序C 数据库管理系统D 财务管理系统2 以下域名中,表示商业网的是() C A eduB cnC comD org3 …