Python可视化--HA Candle作图
Overview
最近遇到一个问题,做蜡烛图,怎么把x轴变为时间轴,candlestick_ohlc中的date数据需要时整数型,当选择其他类型数据时,会报错!
具体文章请参考:如何用Python计算 HA candles
上网找了一下,第一个方法思路是:
- 先把时间转化为数字
- 用数字绘图
- 绘制完图后把xtick改为时间类型,
这里有个小问题,如果休市,会出现一段空白,不是很美观。
当我们使用DateFrame数据格式时,可以使用pandas.core.indexes.datetimes.DatetimeIndex类型的数据格式,一般是df.index,所以我们要解决的问题就是如何使用df.index绘图,我们在第二种方法中会使用df.index。
第一种方法
# 导入库
import pandas as pd
from pandas import DataFrame
import yfinance
from mpl_finance import candlestick_ohlc
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker # ticker 标签
from matplotlib.ticker import Formatter
import matplotlib.dates as dates
import numpy as np
import datetime # Python3 中引入的日时间
import time
# 绘制画布,
plt.rcParams['figure.figsize'] = [12, 7]
plt.rc('font', size=12)
# 获取数据源
name = 'SPY'
ticker = yfinance.Ticker(name)
df = ticker.history(interval="1d", start="2020-12-15", end="2021-04-15")
## 数据结构重排
df['Date'] = range(df.shape[0])
df = df.loc[:, ['Date', 'Open', 'High', 'Low', 'Close']] # 重排 df 数据结构
### date to num
df['Date']=pd.to_datetime(df.index,format="%Y/%m/%d")
df['Date'] = df['Date'].apply(lambda x:dates.date2num(x))
### 定义num转化为str的类
class My_format(Formatter):
def __init__(self, dates, fmt = '%y/%m/%d' ):
self.dates = dates
self.fmt = fmt
def __call__(self, x, pos=0):
'return the label for time x at position pos'
ind = int(np.round(x)) # ind是x的刻度数值,不是日期的下标
return dates.num2date(ind).strftime(self.fmt)
### 定义绘图函数
def plot_charts(df, formatter):
fig, ax = plt.subplots()
fig.subplots_adjust(bottom = 0.1)
candlestick_ohlc(ax, df.values, width=0.6,
colorup='green', colordown='red', alpha=0.8)
ax.xaxis.set_major_formatter(formatter) # 将num 改为 str时间格式
### 调整坐标轴标签位置
for label in ax.get_xticklabels():
label.set_rotation(60) # 旋转60度
label.set_horizontalalignment('right') # 正对标签下方
fig.tight_layout()
fig.show()
### 运行实例
formatter = My_format(df["Date"][:])
plot_charts(df, formatter)
另一种方法
import yfinance
from mpl_finance import candlestick_ohlc
import matplotlib.pyplot as plt
import pandas as pd
# 绘制画布,
plt.rcParams['figure.figsize'] = [12, 7]
plt.rc('font', size=12)
# 获取数据源
name = 'SPY'
ticker = yfinance.Ticker(name)
df = ticker.history(interval="1d", start="2020-12-15", end="2021-04-15")
## 数据结构重排
df['Date'] = range(df.shape[0])
df = df.loc[:, ['Date', 'Open', 'High', 'Low', 'Close']] # 重排 df 数据结构
## 绘图
fig, ax = plt.subplots()
fig.subplots_adjust(bottom = 0.1)
candlestick_ohlc(ax, df.values, width=0.6,
colorup='green', colordown='red', alpha=0.8)
## x轴标签设置
ax.set_xlabel('Time') # x轴标签
ax.set_ylabel('Index') # y轴标签
ax.set_xlim(0, len(df.index)) #x轴范围
ax.set_xticks(range(-1, len(df.index), 15)) # 间隔设置为15
ax.set_xticklabels([df.index.strftime('%Y-%m-%d')[index] for index in ax.get_xticks()]) # 转化为时间标签
### 调整坐标轴标签位置
for label in ax.get_xticklabels():
label.set_rotation(60) # 旋转60度
label.set_fontsize(10) #字体大小设置为10
label.set_horizontalalignment('right') # 正对标签下方
Python可视化--HA Candle作图的更多相关文章
- Python可视化学习(1):Matplotlib的配置
Matplotlib是一个优秀的可视化库,它提供了丰富的接口,让Python的可视化落地显得非常容易上手.本系列是本人学习python可视化的学习笔记,主要用于监督自己的学习进度,同时也希望和相关的博 ...
- Pycon 2017: Python可视化库大全
本文首发于微信公众号“Python数据之道” 前言 本文主要摘录自 pycon 2017大会的一个演讲,同时结合自己的一些理解. pycon 2017的相关演讲主题是“The Python Visua ...
- 数据分析之---Python可视化工具
1. 数据分析基本流程 作为非专业的数据分析人员,在平时的工作中也会遇到一些任务:需要对大量进行分析,然后得出结果,解决问题. 所以了解基本的数据分析流程,数据分析手段对于提高工作效率还是非常有帮助的 ...
- python可视化基础
常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装.入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节.其实学习一门新知 ...
- 高效使用 Python 可视化工具 Matplotlib
Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时面临的一些挑战,为什么要使用Matplo ...
- Python可视化库-Matplotlib使用总结
在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包 先总结下 ...
- Python 可视化工具 Matplotlib
英文出处:Chris Moffitt. Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时 ...
- 这才是你想要的 Python 可视化神器
Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法. 受 Seaborn 和 ggplot2 的启发,它专门 ...
- python可视化pyecharts
python可视化pyecharts 简单介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化 ...
随机推荐
- git 拉取代码指定分支
问题背景: 新项目还在开发阶段,没有正式对外发布,所以开发同事合并代码到develop上(或者其他名称分支上),而不是到master分支上 通过git拉取代码的时候,默认拉取的是master分支,如下 ...
- SpringBoot2.0整合Quartz定时任务(持久化到数据库,更为简单的方式)
1. pom文件添加依赖 <dependencies> <dependency> <groupId>org.springframework.boot</gro ...
- BeanUtils实现对象拷贝(三)
package beanutil; import java.lang.reflect.InvocationTargetException; import java.util.Date; import ...
- 在PyQt中构建 Python 菜单栏、菜单和工具栏
摘要:菜单.工具栏和状态栏是大多数GUI 应用程序的常见且重要的图形组件.您可以使用它们为您的用户提供一种快速访问应用程序选项和功能的方法. 本文分享自华为云社区<Python 和 PyQt:创 ...
- Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象
什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html Python 类 类定义语法 最简单的类定义看起来像这样 class ClassName: ...
- canvas——动画实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux系统下查看svn服务是否启动,重启及设置开机重启
Linux系统中svn服务是否启动,重启及设置开机启动 安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己 ...
- RHCS集群架构之mysql及共享存储iscsi
server1 172.25.7.1(配置Nginx.ricci和luci) server2 172.25.7.2(Apache.iscsi) server3 172.25.7.3(Apache) s ...
- 聊聊 Jmeter 如何并发执行 Python 脚本
1. 前言 大家好,我是安果! 最近有小伙伴后台给我留言,说自己用 Django 写了一个大文件上传的 Api 接口,现在想本地检验一下接口并发的稳定性,问我有没有好的方案 本篇文章以文件上传为例,聊 ...
- Linux下ansible使用
一.ansible的功能和意义 1.功能 ansible批量功能 ----------------------> 并行 01. 可以实现批量系统操作配置 02. 可以实现批量软件服务部署 03. ...