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作图的更多相关文章

  1. Python可视化学习(1):Matplotlib的配置

    Matplotlib是一个优秀的可视化库,它提供了丰富的接口,让Python的可视化落地显得非常容易上手.本系列是本人学习python可视化的学习笔记,主要用于监督自己的学习进度,同时也希望和相关的博 ...

  2. Pycon 2017: Python可视化库大全

    本文首发于微信公众号“Python数据之道” 前言 本文主要摘录自 pycon 2017大会的一个演讲,同时结合自己的一些理解. pycon 2017的相关演讲主题是“The Python Visua ...

  3. 数据分析之---Python可视化工具

    1. 数据分析基本流程 作为非专业的数据分析人员,在平时的工作中也会遇到一些任务:需要对大量进行分析,然后得出结果,解决问题. 所以了解基本的数据分析流程,数据分析手段对于提高工作效率还是非常有帮助的 ...

  4. python可视化基础

    常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装.入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节.其实学习一门新知 ...

  5. 高效使用 Python 可视化工具 Matplotlib

    Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时面临的一些挑战,为什么要使用Matplo ...

  6. Python可视化库-Matplotlib使用总结

    在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包 先总结下 ...

  7. Python 可视化工具 Matplotlib

    英文出处:Chris Moffitt. Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时 ...

  8. 这才是你想要的 Python 可视化神器

    Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法. 受 Seaborn 和 ggplot2 的启发,它专门 ...

  9. python可视化pyecharts

    python可视化pyecharts 简单介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化 ...

随机推荐

  1. 对集合使用Comparator

    1 import java.util.Comparator; 2 import java.util.PriorityQueue; 3 4 /** 5 * 对集合使用Comparator,不改变对象的自 ...

  2. 使用Xshell连接虚机安装的vyOS

    本文主要讲解:使用虚机(Vitual Box)安装的vyOS,如何使用Xshell来通过ssh方式连接. 首先咱们安装vyOS 1.安装vyOS 先用Vitual Box安装vyOS镜像. 接下来的操 ...

  3. win系统打不开CHM文件(例如JDK的API)

    打开文件乱码,打开时弹出乱码 前提说明,存放路径不得有中文,文件名也不能有中文 检查下面三个文件:    hh.exe文件放置电脑 C:\Windows目录下:     hhctrl.ocx ,its ...

  4. springboot系列总结(一)---初识springboot

    Spring Boot是一个简化Spring开发的框架.用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用. 一说springboot ,Java ...

  5. Centos7部署Open-falcon 0.2.0

    官方和github上都有教程,但是对于我来说有的部署内容较为陌生,有点错误官方也未在教程中说明,故在此记录方便以后快速部署,本文部署的时间是2018/10/10. 虽然open-falcon是采用了前 ...

  6. 谈谈redis缓存击穿透和缓存击穿的区别,雪崩效应

    面试经历 在很长的一段时间里,我以为缓存击穿和缓存穿透是一个东西,直到最近去腾讯面试,面试官问我缓存击穿和穿透的区别:我回答它俩是一样的,面试官马上抬起头用他那细长的单眼皮眼睛瞪着我说:"你 ...

  7. tomcat漏洞总结

    描述 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由 ...

  8. 通过cglab 实现 Spring AOP

    1新建一个目标类 public class StudentService { public void delete(){ System.out.println("删除学生"); } ...

  9. 获取office版本

    /// <summary>         /// office版本         /// </summary>         public enum OfficeVers ...

  10. 343 day08File类、递归

    day08[File类.递归] 主要内容 File类 递归 教学目标 [ ] 能够说出File对象的创建方式 [ ] 能够说出File类获取名称的方法名称 [ ] 能够说出File类获取绝对路径的方法 ...