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 生成的图可视化 ...
随机推荐
- 遇到的C++ cli 转 C++ native 为C# 程序提供接口。
接口文件 /*++ (do not edit the above line) ************************************************************* ...
- SpringBoot整合Quartz定时任务(持久化到数据库)
背景 最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效.查看Quartz官网之后发现:Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情 ...
- node后台生成echarts图表
1 //2,生成图片数据 2 var option = { 3 tooltip: { 4 trigger: 'item', 5 formatter: "{a} <br/>{b} ...
- github push报LibreSSL SSL_connect错误
最近发现在家里push代码到github的时候总是报错,报错内容如下: fatal: unable to access 'https://github.com/MangoDowner/clear-le ...
- SpEL表达式注入漏洞学习和回显poc研究
目录 前言 环境 基础学习和回显实验 语法基础 回显实验 BufferedReader Scanner SpEL漏洞复现 低版本SpringBoot中IllegalStateException CVE ...
- vue3.0入门(五):vite构建vue项目
使用vite构建项目步骤 安装node,cmd输入:node -v验证是否安装成功:一般node安装后会自动安装npm,cmd输入:npm -v验证是否安装成功 选择一个文件夹作为项目文件夹,搜索框输 ...
- ES6扩展——数值扩展
1.0o代表八进制 0b代表二进制 ,通过Number()可转为10进制: //0o 0O octanary八进制 //0b 0B binary二进制 console.log(0o16); //14 ...
- python常用工具库介绍
Numpy:科学计算 HOME: http://www.numpy.org/ NumPy is the fundamental package for scientific computing wi ...
- Git工具的使用教程二
1.3时光穿梭机--版本回退 版本回退分为两步骤进行操作: 步骤: 1.查看版本,确定需要回到的时候点 指令: git log git log ...
- 分布式ID生成器及redis,etcd分布式锁
分布式id生成器 有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id.以支持业务中的高并发场景.比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+.明 ...