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. 配置之XML--读取XML文件 转存为Key-Value

    将XML文件读取 绑定数据至Dictionary Eg: Xml文件 <?xml version="1.0" encoding="utf-8" ?> ...

  2. mybatis学习日志一

    Mybatis 介绍 MyBatis 是支持 普通 SQL 查询 , 存储过程 和 高级映射 的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以 及对结果集的检索封装 ...

  3. 【设计模式】java设计模式目录

    1.创建型模式 JDK1.5枚举Singleton    单例模式 AbstractFactory  工厂方法模式    简单工厂模式 Builder Prototype 2.结构型 java设计模式 ...

  4. 设置Sublime插件快捷键--实现CSS颜色选取

    安装插件ColorPicker 如果你经常要查看或设置颜色值,这个插件可以很方便地调用你本机的调色板应用.(译者扩充:)这是一个双向的功能,你既可以在调色板中选择一个颜色,然后按"确定&qu ...

  5. hdfs中数据迁移

    1.hdfs集群间数据迁移 hadoop distcp hdfs://192.128.112.66:8020/user/hive/warehouse/data.db/dwi_xxxx_d  /user ...

  6. Windows搭建mac黑苹果系统

    最近看到一个开源工具tidevice,是可以脱离mac来做ios自动化测试的.看到这么方便,就想着来尝尝鲜.但由于使用该工具,是需要基于WebDriverAgent的,该工具又需要使用Xcode重签名 ...

  7. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  8. 有关spring注解总结

    前言 目前企业开发多采用纯注解的方式开发,注解开发的好处:简洁,可读性强 最近学习了spring全家桶,总结了有关spring的常用注解,写的不对的地方,欢迎指正 Spring模块注解 @Config ...

  9. indexedDB数据库创建

    1.首先需要使用使用indexedDB.open()方法,打开数据库 2.通过createObjectStore方法创建表, 创建表之后, 这个表通过createIndex方法创建索引 3.通过tra ...

  10. 一文读懂Redis

    目录结构如下: 简介 Redis是一个高性能的key-value数据库.Redis对数据的操作都是原子性的. 优缺点 优点: 基于内存操作,内存读写速度快. Redis是单线程的,避免线程切换开销及多 ...