使用Python的pandas模块、mplfinance模块、matplotlib模块绘制K线图
pandas模块、mplfinance模块和matplotlib模块介绍
pandas模块
pandas为解决数据分析任务而创建,纳入了大量的库和一些标准的数据模型,简而言之,它提供了很多数据处理的方法,此文就是借用它来生成DataFrame格式的数据。
mplfinance模块和matplotlib模块
mplfinance是专用于金融数据的可视化分析模块,是基于matplotlib的实用模块程序,而matplotlib模块是python绘图领域使用最广泛的套件。简而言之,python想使用可视化,就可以使用matplotlib,想在可视化里面绘制金融方面的图标,就可以使用mplfinance。
安装mplfinance模块、pandas模块和matplotlib模块
可以使用Python包管理也就是pip来进行安装,在cmd命令行中输入 pip install mplfinance后,系统将自动安装完成。如下图:
然后依次安装Pandas模块和matplotlib模块, pip install Pandas pip install matplotlib
当然,在模块安装过程中会因为网络问题导致失败,多次尝试后仍然失败,可以更换pip源为国内镜像。
处理股票数据
该文处理的数据为一个包含股票数据的json格式文件。由于我们要使用mplfinance.plot()函数绘制K线图,而该函数就只接收pandas.DataFrame格式的数据,所以需要将json格式文件数据转换为pandas.DataFrame格式数据。
# k线图数据处理
# 读取json文件,获取数据
df = pd.read_json('AAPL.json', orient='index')
# 删除无效数据数据
for index, row in df.iterrows():
if(isnot_float(row['Open'])):
df.drop(index, inplace=True)
# 调整数据顺序
df = df.iloc[::-1]
# 设置索引
df.set_index(['Date'], inplace=True)
# 将数据列转换为float,因为json字符串存在坏数据,所以读取的时候,所有列默认为字符串了。
df = df.apply(pd.to_numeric, errors='ignore')
处理前的json数据格式如下图:

处理后的DataFrame数据格式:

设置图像大小
# 绘图
# 自定义一个10*8的画布
fig = plt.figure(figsize=(12, 8))
# 对画布划分,显示在1行*1列的第一块区域,其实也仅有一块区域
ax = fig.add_subplot(1, 1, 1)
加载K线图并设置格式
# 加载K线图
mpf.plot(df, type='candle', ax=ax, style='binance', datetime_format='%Y-%m-%d')
# 设置横轴值为时间格式
ax.xaxis_date()
# 通过tight_layout(),实现子图集铺满
plt.tight_layout()
# 显示
plt.show()
完整代码
import matplotlib.pyplot as plt
import mplfinance as mpf
import pandas as pd
# 用来判断str能否转换为float,用于剔除无效数据
def isnot_float(str):
try:
float(str)
return False
except ValueError:
print(str)
return True
# k线图数据处理
# 读取json文件,获取数据
df = pd.read_json('AAPL.json', orient='index')
# 删除无效数据数据
for index, row in df.iterrows():
if(isnot_float(row['Open'])):
df.drop(index, inplace=True)
# 调整数据顺序
df = df.iloc[::-1]
# 设置索引
df.set_index(['Date'], inplace=True)
# 将数据列转换为float,因为json字符串存在坏数据,所以读取的时候,所有列默认为字符串了。
df = df.apply(pd.to_numeric, errors='ignore')
# 绘图
# 自定义一个10*8的画布
fig = plt.figure(figsize=(12, 8))
# 对画布划分,显示在1行*1列的第一个子图集,其实也仅有一个子图集
ax = fig.add_subplot(1, 1, 1)
# 加载K线图
mpf.plot(df, type='candle', ax=ax, style='binance', datetime_format='%Y-%m-%d')
# 设置横轴值为时间格式
ax.xaxis_date()
# 通过tight_layout(),实现子图集铺满
plt.tight_layout()
# 显示
plt.show()
使用Python的pandas模块、mplfinance模块、matplotlib模块绘制K线图的更多相关文章
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...
- 小白学Python(14)——pyecharts 绘制K线图 Kline/Candlestick
Kline-基本示例 from pyecharts import options as opts from pyecharts.charts import Kline data = [ [2320.2 ...
- 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...
- windows下python安装Numpy、Scipy、matplotlib模块(转载)
python下载链接 Numpy下载链接 python中Numpy包的安装及使用 Numpy包的安装 准备工作 Python安装 pip安装 将pip所在的文件夹添加到环境变量path路径中 ...
- [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上
将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...
- Windows python 安装 nNumpy、Scipy、matplotlib模块
折腾了 很久,总结一些. 首先如果python 是64位,安装32位的numpy ,Scipy,或者matplotlib 模块. 会出现很多问题. 比如当你 在python 导入 Numpy 时,导入 ...
- pandas 生成并排放置的条形图和箱线图
1.代码 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成数据,创建 DataFrame np.r ...
- windows下python安装Numpy、Scipy、matplotlib模块
来源http://blog.csdn.net/Katrina_ALi/article/details/64922107 http://blog.csdn.net/qq_16633405/article ...
- 【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题
前言 众所周知,通过数据绘图,我们可以将枯燥的数字转换成容易被人们接受的图表,从而让人留下更加深刻的印象.而大多数编程语言都有自己的绘图工具,matplotlib就是基于Python的绘图工具包,使用 ...
随机推荐
- 中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束
本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...
- Swift3.0学习之基础部分
1.常量和变量 常量和变量把一个名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个指定类型的值(比如数字 10 或者字符串 " ...
- Java 8 新特性 - Lambda表达式
Lambda表达式 vs 匿名类既然lambda表达式即将正式取代Java代码中的匿名内部类,那么有必要对二者做一个比较分析.一个关键的不同点就是关键字 this.匿名类的 this 关键字指向匿名类 ...
- [LeetCode]160. Intersection of Two Linked Lists判断交叉链表的交点
方法要记住,和判断是不是交叉链表不一样 方法是将两条链表的路径合并,两个指针分别从a和b走不同路线会在交点处相遇 public ListNode getIntersectionNode(ListNod ...
- Qt学习笔记-启动一个额外的应用程序-获取输入的回车信号
现在让我们的程序模拟windows下的运用程序. 在命令行中输入命令.点击确定即可运行系统中的程序. 添加头文件#include <QProcess> 在确定按钮的响应函数中写上功能要求. ...
- ESP8266系列图片外观 Wi-Fi模块一共有01~14十多款模块
- C/C++ 弱符号
为什么会出现弱符号 在两个目标文件(a.o与b.o)链接的过程中,如果其中一个目标文件(a.o)通过extern的方式引用了另外一个目标文件(b.o)中的符号flag,但很不幸,在连接的过程中b.o没 ...
- 大数据量查询容易OOM?试试MySQL流式查询
一.前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM). 其实在 MySQL 数据库中提供了流式查询,允许把符 ...
- node使用xlsx导入导出excel
1.安装和引入xlsx 安装 npm install xlsx 引入:let xlsx = require('xlsx');2.读取excel数据function readFile(file) { ...
- ethernet
OSI参考模型 简化相关网络操作:提供不同厂商之间的互联 应用层 为应用程序提供服务 HTTP Telnet 表示层 数据格式化,加密.解密 ASCII EBCDIC JPEG 会话层 建立.维护.管 ...