接着上一篇文章《Pyecharts绘制K线图》,今天来继续完善所绘制K线图的内容。介绍如何实现股票成交量及标记信号的绘制。

一、成交量柱状图的绘制

成交量柱状图的绘制要用到Bar()。其用法与Kline()和Line()类似,添加XY轴数据,通过set_global_opts()设置全局属性。

简单的用法如下所示:

bar = (Bar().add_xaxis(xaxis_data=list(df.index)) #X轴数据.add_yaxis(series_name="volume",y_axis=df["volume"].tolist(), #Y轴数据xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='#ef232a' #'#14b143'),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category", #坐标轴类型-离散数据grid_index=1,axislabel_opts=opts.LabelOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),)
)

成交量柱状图的数据为离散型,其X轴类型应该设为“category”。

二、图像纵向排列

Grid() 用来将多个图像纵向排列显示,方便进行不同类型图像元素的组合管理。这个功能比较简单,大家直接看实例就好了。

其中需要使用GridOpts来配置图形位置,常用属性为pos_left、pos_right、pos_top、pos_bottom,分别表示组件离容器左侧、右侧、上侧和下侧的距离。位置指定方式有三种:

像素,即直接给定像素值。

百分比,即相对于容器高宽的百分比。

方位,即left、right、center/top、middle、bottom,组件会根据相应的位置自动对齐。

完整的代码如下:

import akshare as ak
import pandas as pd
from pyecharts.charts import *
from pyecharts import options as optsdf = ak.stock_zh_a_hist(symbol="600036", start_date='20220101',end_date='20220916', adjust="qfq").iloc[:, :6]
df.columns = ['date','open','close','high','low','volume',]# 把date作为日期索引
df.index = pd.to_datetime(df.date)
df.index=df.index.strftime('%Y%m%d')
df=df.sort_index()
df['sma']=df.close.rolling(5).mean()
df['lma']=df.close.rolling(10).mean()#均线
line=Line()
line.add_xaxis( df.index.tolist() )
line.add_yaxis( 'MA5',df.sma.round(2).tolist(),is_smooth=True )
line.add_yaxis( 'MA10',df.lma.round(2).tolist(),is_smooth=True )
line.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #是否显示数据标签
line.set_global_opts(datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside", #图内缩放调整xaxis_index=[0,1],  #可缩放的x轴坐标编号range_start=0, range_end=100, #初始显示范围),opts.DataZoomOpts(is_show=True, #是否显示滑块type_="slider", #外部滑块缩放调整xaxis_index=[0,1],  #可缩放的x轴坐标编号pos_top="85%",range_start=0, range_end=100, #初始显示范围),],legend_opts=opts.LegendOpts(pos_right="20%",pos_top="5%"), #图例位置tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross") #添加趋势线
)bar = (Bar().add_xaxis(xaxis_data=list(df.index)) #X轴数据.add_yaxis(series_name="volume",y_axis=df["volume"].tolist(), #Y轴数据xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='#ef232a' #'#14b143'),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category",grid_index=1,axislabel_opts=opts.LabelOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),)
)grid_chart = Grid(init_opts=opts.InitOpts(width="1200px", #显示图形宽度height="600px",animation_opts=opts.AnimationOpts(animation=False),)
)
grid_chart.add( #加入均线图line,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="40%"),
)
grid_chart.add( #加入成交量图bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="60%", height="20%"),
)
grid_chart.render("volume.html")

如下图所示:

三、K线加标记

在K线上加标记是使用系列配置项的MarkPointOpts() 设置,包含以下主要属性:

data:标记点数据

symbol:标记的图形。包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'。也可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。

symbol_size:标记的大小,可用数组分开表示宽和高,

label_opts:设置标签字体、颜色、背景等

其中数据点通过标记点数据项MarkPointItem()设置,常用属性包括:

name:标注名称

type_:标注类型,'min' 最大值,'max' 最大值,'average' 平均值。

value_index:指定维度,默认使用第一个轴。

value_dim:指定维度名称。

x,y:指定相对显示位置坐标。

value:标注值。

itemstyle_opts:标记点样式配置。

显示价格最大值和最小值的示例如下:

markpoint_opts=opts.MarkPointOpts( #添加标记符
data=[ opts.MarkPointItem(type_='max', name='最大值'),opts.MarkPointItem(type_='min', name='最小值'),],symbol_size=[100,30],)

四、综合示例

下面把成交量、标记信号和K线以及均线整合,形成一个在比较完整的K线图。

代码如下:

import akshare as ak
import pandas as pd
from pyecharts.charts import *
from pyecharts import options as optsdf = ak.stock_zh_a_hist(symbol="600036", start_date='20220101',end_date='20220916', adjust="qfq").iloc[:, :6]
df.columns = ['date','open','close','high','low','volume',]# 把date作为日期索引
df.index = pd.to_datetime(df.date)
df.index=df.index.strftime('%Y%m%d')
df=df.sort_index()
df['sma']=df.close.rolling(5).mean()
df['lma']=df.close.rolling(10).mean()
df['lma20']=df.close.rolling(20).mean()
df['lma30']=df.close.rolling(30).mean()
df['lma60']=df.close.rolling(60).mean()kline = (Kline(init_opts=opts.InitOpts(width="1200px",height="600px")).add_xaxis(xaxis_data=list(df.index)) #X轴数据.add_yaxis(series_name="klines", #序列名称y_axis=df[["open","close","low","high"]].values.tolist(), #Y轴数据itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),markpoint_opts=opts.MarkPointOpts(data=[#添加标记符opts.MarkPointItem(type_='max', name='最大值'),opts.MarkPointItem(type_='min', name='最小值'), ],#symbol='circle',#symbol_size=[100,30]),).set_global_opts(title_opts=opts.TitleOpts(title="K线及均线",pos_left='45%'), #标题位置legend_opts=opts.LegendOpts(pos_right="35%",pos_top="5%"), #图例位置#legend_opts=opts.LegendOpts(is_show=True, pos_bottom=10, pos_left="center"),datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside", #内部缩放xaxis_index=[0,1],  #可缩放的x轴坐标编号range_start=0, range_end=100, #初始显示范围),opts.DataZoomOpts(is_show=True, #显示滑块type_="slider", #滑块缩放xaxis_index=[0,1],  #可缩放的x轴坐标编号pos_top="85%",range_start=0, range_end=100, #初始显示范围),],yaxis_opts=opts.AxisOpts(is_scale=True, #缩放时是否显示0值splitarea_opts=opts.SplitAreaOpts( #分割显示设置is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ),),tooltip_opts=opts.TooltipOpts( #提示框配置trigger="axis", #坐标轴触发提示axis_pointer_type="cross", #鼠标变为十字准星background_color="rgba(245, 245, 245, 0.8)", #背景颜色border_width=1, border_color="#ccc", #提示框配置textstyle_opts=opts.TextStyleOpts(color="#000"), #文字配置),visualmap_opts=opts.VisualMapOpts( #视觉映射配置is_show=False, dimension=2,series_index=5, is_piecewise=True,pieces=[ {"value": 1, "color": "#00da3c"}, {"value": -1, "color": "#ec0000"},             ],),axispointer_opts=opts.AxisPointerOpts( #轴指示器配置is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"), #显示标签设置),brush_opts=opts.BrushOpts(x_axis_index="all", #所有seriesbrush_link="all", #不同系列选中后联动out_of_brush={"colorAlpha": 0.1}, #高亮显示程度brush_type="lineX", #纵向选择),)
)#均线
line=Line()
line.add_xaxis( df.index.tolist() ) #X轴数据
line.add_yaxis( 'MA5', #序列名称df.sma.round(2).tolist(), #Y轴数据is_smooth=True, #平滑曲线is_symbol_show=False #不显示折线的小圆圈
)
line.add_yaxis( 'MA10',df.lma.round(2).tolist(),is_smooth=True,is_symbol_show=False )
line.add_yaxis( 'MA20',df.lma20.round(2).tolist(),is_smooth=True,is_symbol_show=False )
line.add_yaxis( 'MA30',df.lma30.round(2).tolist(),is_smooth=True,is_symbol_show=False )
line.add_yaxis( 'MA60',df.lma60.round(2).tolist(),is_smooth=True,is_symbol_show=False )
line.set_series_opts(label_opts=opts.LabelOpts(is_show=False), #是否显示数据标签linestyle_opts=opts.LineStyleOpts(width=1), #线宽
)
line.set_global_opts(datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside", #图内缩放调整xaxis_index=[0,1],  #可缩放的x轴坐标编号range_start=0, range_end=100, #初始显示范围),opts.DataZoomOpts(is_show=True, #是否显示滑块type_="slider", #外部滑块缩放调整xaxis_index=[0,1],  #可缩放的x轴坐标编号pos_top="85%",range_start=0, range_end=100, #初始显示范围),],legend_opts=opts.LegendOpts(pos_right="20%",pos_top="5%"), #图例位置tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross") #趋势线设置
)
kline.overlap(line)#成交量
bar = (Bar().add_xaxis(xaxis_data=list(df.index)) #X轴数据.add_yaxis(series_name="volume",y_axis=df["volume"].tolist(), #Y轴数据xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='#ef232a' #'#14b143'),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category", #坐标轴类型-离散数据grid_index=1,axislabel_opts=opts.LabelOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),)
)#图像排列
grid_chart = Grid(init_opts=opts.InitOpts(width="1200px", #显示图形宽度height="600px",animation_opts=opts.AnimationOpts(animation=False), #关闭动画)
)grid_chart.add( #加入均线图kline,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="40%"),
)
grid_chart.add( #加入成交量图bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="60%", height="20%"),
)
grid_chart.render("volume.html")

结果如下图所示:

-----------------------------------

原创不易,请多支持!

PyeCharts绘制K线图(续)相关推荐

  1. python画k线图_小白学Python(14)——pyecharts 绘制K线图 Kline/Candlestick

    Kline-基本示例 from pyecharts import options as opts from pyecharts.charts import Kline data = [ [2320.2 ...

  2. pyecharts绘制K线图,并添加辅助线

    官方示例可以参考:https://gallery.pyecharts.org/#/Candlestick/kline_datazoom_slider 文章目录 绘制K线图 绘制有辅助线的K线图 绘制K ...

  3. Pyecharts绘制K线图

    一.简介 Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 Python 是一门富有表达力的语言,很适合用于数据处理.当数据分析遇上数据可视 ...

  4. 用pyecharts绘制K线图

    获取股票数据部分,方法很多.关键是后半部分,用非常简短的代码实现了K线图,pyecharts真强! from jqdatasdk import * import numpy as np from py ...

  5. Python绘制K线图之可视化神器pyecharts

    目录 K线图 概念 用处 K线图系列模板 最简单的K线图绘制 K线图鼠标缩放 有刻度标签的K线图 K线图鼠标无缩放 大量数据K线图绘制(X轴鼠标可移动) 每文一语 K线图 概念 股市及期货市bai场中 ...

  6. python能画k线图吗_,求教使用python绘制K线图

    如何用python实现视频关键帧提取并保存为图片 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件 c=1 if vc.isOpened(): ...

  7. python 股票图表_k线图分析法_【趣味案例】用Python绘制K线图,一眼看清股市状况...

    本文介绍关于[趣味案例]用Python绘制K线图,一眼看清股市状况及神一般的裸k交易法,精髓就这三步,一目了然!精髓就这三步,一目了然!(附图解析)的相关内容. [趣味案例]用Python绘制K线图, ...

  8. python 窗体k线图_一眼看清股市状况之用Python绘制K线图

    前几天美股熔断,据悉这次熔断是自美股有熔断机制30年来第二次,成了头条新闻.对股票一窍不通的我也在此情此景进行了一波学习,股市的变化瞬息万千,有一种图可以用来清晰地反应一段时间内股市的变化情况,它就是 ...

  9. python k线图和指标_期货k线图基础知识_一眼看清股市状况之用Python绘制K线图

    本文介绍关于一眼看清股市状况之用Python绘制K线图与cdp指标与期货大盘的分析周期选用有关吗?应该选用日线,还是60分钟.30分钟等时分线最为精确.与股票指标ovl是什么意思与股票均线怎么看与我想 ...

最新文章

  1. mysql MDL锁如何解决_MySQL元数据锁MDL
  2. [学习笔记] ES6的数组遍历方式 for, forEach,for...in, for...of
  3. 在emu8086中学习汇编语言加减法程序
  4. 232/485电平,OC门,OD门,TTL电平,CMOS电平,
  5. 什么意思中文翻译_os常见意思介绍
  6. 为什么你学了 N 遍 Spring Boot,至今还是学生项目?你的问题在这里 | 原力计划...
  7. 为了程序员的颈椎,做机械键盘的 Cherry 发布了把椅子!
  8. java.util.Random 类的 nextInt(int num )
  9. 从0开始前端开发_设置DIV内容居中
  10. 2005年1月-2008年10月雅思A类(学术类)作文 TASK 2 考题汇总(10月4日更新)
  11. 在Ubuntu上安装使用Systemtap
  12. Atitit java的异常exception 结构Throwable类
  13. 在面试过程中面试官可能会问到的问题
  14. 用数据分析看泰坦尼克号
  15. 保护个人信息,才能享受大数据的时代成果
  16. 微机原理——基础知识及计算机基本组成
  17. ipadmobile通用webapp框架前哨战
  18. 自有App小程序第三方微信授权登录的实现
  19. 2021-12-21 数据库系统原理复习提纲(一)
  20. 【矩阵乘法】行为方案

热门文章

  1. 软件测试mysql面试题:什么是存储过程?有哪些优缺点?
  2. android 手机拍照、相册选择照片并显示
  3. python输出数字和字符串_Python中的数值和字符串
  4. Day03.分支结构
  5. pycharm代码上传github教程
  6. 通过twilio模块发送短信
  7. 安卓10拨号流程详细总结
  8. Win10如何禁止自动添加局域网内的打印机
  9. √[ (11^4+100^4+111^4)÷2]的开根号算法
  10. OpenCV——图像梯度与边缘检测(python实现)