返回顶部
首页 > 资讯 > 精选 >Vue+Echarts怎么实现分时图和交易量图绘制
  • 164
分享到

Vue+Echarts怎么实现分时图和交易量图绘制

2023-07-05 13:07:46 164人浏览 安东尼
摘要

这篇文章主要介绍“Vue+Echarts怎么实现分时图和交易量图绘制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue+Echarts怎么实现分时图和交易量图绘制”文章能帮助大家解决问题。分时图1

这篇文章主要介绍“Vue+Echarts怎么实现分时图和交易量图绘制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue+Echarts怎么实现分时图和交易量图绘制”文章能帮助大家解决问题。

    分时图

    1 vue引入Echarts

    2 分时图介绍

    分时图本质上也是一个折线图,横坐标为一天交易的每一分钟,纵坐标为股市的实时单价。除了实现这两个基本的功能以外,还需要带上每分钟交易量图,当鼠标放在图上时,要展示当前时间对应的相关数据;如下图所示:

    Vue+Echarts怎么实现分时图和交易量图绘制

    我们本期要实现的功能为:分时折线图、分时成交量图,鼠标指示展示详细数据,对应成交量颜色划分;其余的一些细节的功能(图切换,细节颜色以及样式处理)我们以后再做介绍。

    3 分时折线图配置

    分时折线图本质上是折线图,我们通过设置图类型为折线即可,重点是对数据的处理,我们的数据源格式是JSON对象数组数据,每一分钟数据如下所示:

    {"time":"1678411800","price":"3255.51","ratio":"-0.63%","increase":"-20.58","volume":"2925368","avgPrice":"3261.35","amount":"29.00\u4ebf","timeKey":"0930","datetime":"03-10 09:30","oriAmount":"2900320446","show":"1"},

    首先我们需要对数据进行处理,才能应用于Echarts之中;我们分时折线图配置项代码代码如下所示:

     // 横坐标数据配置        xAxis: [          {            type: "cateGory",            data: this.xData,            boundaryGap: false,            axisLine: { onZero: false },            splitLine: { show: false },            min: "dataMin",            max: "dataMax"          },        ]// 纵坐标配置        yAxis: [          {            scale: true,            splitArea: {              show: true            }          },        ]//图形数据配置:        series: [          {            type: "line",            data: this.hourData,            symbol: "none", //无标记图案            lineStyle: {              width: 1            }          },        ]

    其中,this.xData是我们vue页面中的经过处理的横坐标数据,this.hourData是我们页面中经过处理的每小时数据。

    注意:series中symbol属性要设置为none,这样的到的折线图上将会不出线标记图案。

    数据处理代码如下:

        // 横坐标数据处理    initxData() {      for (let i = 0; i < this.klineData.length; i++) {        this.xData[i] = this.klineData[i].datetime;      }    },        // 数据计算以及拆分,将json数据转为数组数据    splitData(jsonData) {      const hourData = [];      for (let i = 0; i < jsonData.length; i++) {        hourData.push([          i,          jsonData[i].price,          jsonData[i].increase,          jsonData[i].volume,          jsonData[i].ratio,          jsonData[i].amount,          jsonData[i].datetime        ]);      }      return hourData;    }

    其中, this.klineData是我们页面引入的json数据。

    到此我们可以来看一下分时折线图的效果:

    Vue+Echarts怎么实现分时图和交易量图绘制

    可以看到得到的折线图就是为我们的分时折线图。

    4 组合交易量图

    交易量图为2.2图中底部的红绿交间的柱状图,交易量图本质是一个柱状图,我们可以看到有两个特点:

    横坐标与分时折线图公用,且柱状图在交易图下方;

    当前为涨时,柱子为红色,当前为跌时,柱子为绿色;

    对于特点1,在我们之前介绍的图中,都是公用坐标系的图,这里新知识点就是不公用坐标系,但是公用横坐标数据应该怎么处理;就是在xAxis、yAxis和series中设置两个对象出来,代表两个不同的坐标西,然后将两个坐标系的横坐标进行对齐即可;

    代码如下:

    // 横坐标数据        xAxis: [          // 折线图          {            type: "category",            data: this.xData,            boundaryGap: false,            axisLine: { onZero: false },            splitLine: { show: false },            min: "dataMin",            max: "dataMax"          },          // 柱状图          {            type: "category",            gridIndex: 1, //x 轴所在的 grid 的索引,默认位于第一个 grid。            data: this.xData,            boundaryGap: false,            axisLine: { onZero: false },            axisTick: { show: false },            splitLine: { show: false },            axisLabel: { show: false },            min: "dataMin",            max: "dataMax"          }        ],        // 纵坐标配置        yAxis: [          {            scale: true,            splitArea: {              show: true            }          },          {            scale: true,            gridIndex: 1, // y 轴所在的 grid 的索引,默认位于第一个 grid            splitNumber: 2,            axisLabel: { show: false },            axisLine: { show: false },            axisTick: { show: false },            splitLine: { show: false }          }        ],         series: [          {            type: "line",            data: this.hourData,            symbol: "none", //无标记图案            lineStyle: {              width: 1            }          },          {            name: "Volume",            type: "bar",            xAxisIndex: 1,            yAxisIndex: 1,            data: this.culomnValue          }        ]

    对于特点2,控制每个柱状图颜色不同,我们需要用到visualMap.pieces属性;官网上对该属性的说明是:自定义『分段式视觉映射组件(visualMapPiecewise)』的每一段的范围,以及每一段的文字,以及每一段的特别的样式。

    我们直接上代码以及讲解,来看这个属性怎么使用,代码如下:

             visualMap: {          type: "piecewise",          show: false, //不展示map,只应用对应颜色划分逻辑          seriesIndex: 1, //指定取哪个系列的数据          dimension: 2,          // 定义每一段的颜色          pieces: [            {              value: -1,              color: this.downColor            },            {              value: 1,              color: this.upcolor            }          ]        },

    这段代码的解释是:当series的data数据里面有value==-1的值时,使用color为this.downColor,value==1时,使用color为this.upcolor.

    此时,我们还需要对颜色数据进行处理一下,将k线图对应时间段的增长和下跌展示在数组里面,成交量数据处理代码如下:

        // 初始化交易数据和交易柱状图颜色参数    initCulomnColor() {      this.culomnColor[0] = this.klineData[0].increase > 0 ? 1 : -1;      this.culomnValue[0] = [0, this.klineData[0].volume, -1];      for (let i = 1; i < this.klineData.length; i++) {        this.culomnColor[i] =          this.klineData[i].price > this.klineData[i - 1].price ? 1 : -1;        this.culomnValue[i] = [          i,          this.klineData[i].volume,          this.culomnColor[i]        ];      }    },

    到这里我们成交量柱状图即可渲染出来了,下一步就是将折线图和柱状图位置进行调整,给两个图分配合适的区域,代码如下:

     // 图像位置配置        grid: [          {            left: "10%",            right: "10%",            height: "50%"          },          {            left: "10%",            right: "10%",            top: "65%",            height: "18%"          }        ],

    grid配置两个对象分别代表折线图和柱状图位置;

    融合之后我们看到的效果图如下:

    Vue+Echarts怎么实现分时图和交易量图绘制

    5 鼠标指示数据设置

    k线图的要求是当鼠标指示在图的某个位置时,需要将这个时间段的详细数据展示出来;在此我们需要要利用到tooltip属性,但这个属性默认之后展示当前横坐标和纵坐标的值,吐过需要对展示的数据进行配置的话,我们还需要借助tooltip.fORMatter属性来返回我们想要的展示的数据,该属性可拓展范围非常广,本次不展开介绍,只介绍在k线图中的基本使用。代码如下:

    tooltip: {          trigger: "axis",          axisPointer: {            type: "cross" //十字准星指示器          },          borderWidth: 1,          borderColor: "#ccc",          padding: 10,          textStyle: {            color: "#000"          },          formatter: function(param) {            param = param[0];            return [              "时间: " + param.data[6] + '<hr size=1 >',              "价格: " + param.data[1] + "<br/>",              "涨跌额: " + param.data[2] + "<br/>",              "成交量: " + param.data[3] + "<br/>",              "涨跌幅: " + param.data[4] + "<br/>"            ].join("");          }        },

    我们将:时间、价格、涨跌额、成交量、涨跌幅五个属性展示在页面上,样式从简。得到的效果如下:

    Vue+Echarts怎么实现分时图和交易量图绘制

    至此基本完成了分时折线图和交易量图的绘制;

    6 项目完整代码

    vue项目完整代码如下:

    <template>  <div class="echart" id="mychart" ></div></template><script>import * as echarts from "echarts";import SZHourData from "./data/hourData.TS";export default {  data() {    return {      upcolor: "#FF0000", //增长颜色      upBorderColor: "#8A0000",      downColor: "#008000", // 下跌颜色      downBorderColor: "#008F28",      klineData: [], //k线图数据      hourData: [], //charts表格小时数据      xData: [],      culomnColor: [], //颜色      culomnValue: []    };  },  mounted() {    // 数据初始化    this.initData();    // 图标初始化    this.initEcharts();  },  methods: {    initData() {      this.klineData = SZHourData.priceinfo;      this.hourData = this.splitData(this.klineData);      this.initxData();    },    initEcharts() {      const option = {        title: {          text: "上证指数",          left: 0        },        tooltip: {          trigger: "axis",          axisPointer: {            type: "cross" //十字准星指示器          },          borderWidth: 1,          borderColor: "#ccc",          padding: 10,          textStyle: {            color: "#000"          },          formatter: function(param) {            param = param[0];            return [              "时间: " + param.data[6] + '<hr size=1 >',              "价格: " + param.data[1] + "<br/>",              "涨跌额: " + param.data[2] + "<br/>",              "成交量: " + param.data[3] + "<br/>",              "涨跌幅: " + param.data[4] + "<br/>"            ].join("");          }        },        visualMap: {          type: "piecewise",          show: false, //不展示map,只应用对应颜色划分逻辑          seriesIndex: 1, //指定取哪个系列的数据          dimension: 2,          // 定义每一段的颜色          pieces: [            {              value: -1,              color: this.downColor            },            {              value: 1,              color: this.upcolor            }          ]        },        // 图像位置配置        grid: [          {            left: "10%",            right: "10%",            height: "50%"          },          {            left: "10%",            right: "10%",            top: "65%",            height: "18%"          }        ],        // 横坐标数据        xAxis: [          // 折线图          {            type: "category",            data: this.xData,            boundaryGap: false,            axisLine: { onZero: false },            splitLine: { show: false },            min: "dataMin",            max: "dataMax"          },          // 柱状图          {            type: "category",            gridIndex: 1, //x 轴所在的 grid 的索引,默认位于第一个 grid。            data: this.xData,            boundaryGap: false,            axisLine: { onZero: false },            axisTick: { show: false },            splitLine: { show: false },            axisLabel: { show: false },            min: "dataMin",            max: "dataMax"          }        ],        // 纵坐标配置        yAxis: [          {            scale: true,            splitArea: {              show: true            }          },          {            scale: true,            gridIndex: 1, // y 轴所在的 grid 的索引,默认位于第一个 grid            splitNumber: 2,            axisLabel: { show: false },            axisLine: { show: false },            axisTick: { show: false },            splitLine: { show: false }          }        ],        dataZoom: [          {            type: "inside",            xAxisIndex: [0, 1],            start: 50, //展示的数据范围,默认为50%-100%            end: 100          },          {            show: true,            xAxisIndex: [0, 1],            type: "slider",            top: "90%",            start: 50, //展示的数据范围,默认为50%-100%            end: 100          }        ],        series: [          {            type: "line",            data: this.hourData,            symbol: "none", //无标记图案            lineStyle: {              width: 1            }          },          {            name: "Volume",            type: "bar",            xAxisIndex: 1,            yAxisIndex: 1,            data: this.culomnValue          }        ]      };      const myChart = echarts.init(document.getElementById("mychart"));      myChart.setOption(option);      //随着屏幕大小调节图表      window.addEventListener("resize", () => {        myChart.resize();      });    },    // 横坐标数据处理    initxData() {      for (let i = 0; i < this.klineData.length; i++) {        this.xData[i] = this.klineData[i].datetime;      }      this.initCulomnColor();    },    // 初始化交易数据和交易柱状图颜色参数    initCulomnColor() {      this.culomnColor[0] = this.klineData[0].increase > 0 ? 1 : -1;      this.culomnValue[0] = [0, this.klineData[0].volume, -1];      for (let i = 1; i < this.klineData.length; i++) {        this.culomnColor[i] =          this.klineData[i].price > this.klineData[i - 1].price ? 1 : -1;        this.culomnValue[i] = [          i,          this.klineData[i].volume,          this.culomnColor[i]        ];      }    },    // 数据计算以及拆分,将json数据转为数组数据    splitData(jsonData) {      const hourData = [];      for (let i = 0; i < jsonData.length; i++) {        hourData.push([          i,          jsonData[i].price,          jsonData[i].increase,          jsonData[i].volume,          jsonData[i].ratio,          jsonData[i].amount,          jsonData[i].datetime        ]);      }      return hourData;    }  }};</script>

    关于“Vue+Echarts怎么实现分时图和交易量图绘制”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: Vue+Echarts怎么实现分时图和交易量图绘制

    本文链接: https://lsjlt.com/news/351742.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Vue+Echarts怎么实现分时图和交易量图绘制
      这篇文章主要介绍“Vue+Echarts怎么实现分时图和交易量图绘制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue+Echarts怎么实现分时图和交易量图绘制”文章能帮助大家解决问题。分时图1...
      99+
      2023-07-05
    • Vue+Echarts实现分时图和交易量图的绘制
      目录1 前言2 分时图2.1 vue引入Echarts2.2 分时图介绍2.3 分时折线图配置2.4 组合交易量图2.5 鼠标指示数据设置2.6 项目完整代码3 总结1 前言 近来发...
      99+
      2023-03-15
      Vue Echarts绘制分时图 Vue Echarts绘制交易量图 Vue Echarts
    • Vue+Echarts实现绘制动态折线图
      目录1 引入Echarts1.1 安装1.2 引入1.3 基本使用2 动态折线图2.1 基本折线图2.2 动态折线图补充1 引入Echarts 1.1 安装 使用如下命令通过 npm...
      99+
      2023-03-19
      Vue Echarts绘制动态折线图 Vue Echarts绘制折线图 Vue Echarts 折线图 Vue Echarts
    • 怎么使用Vue+Echarts绘制饼图
      这篇文章主要介绍“怎么使用Vue+Echarts绘制饼图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vue+Echarts绘制饼图”文章能帮助大家解决问题。1 引入Echarts1.1 安...
      99+
      2023-07-05
    • Vue+Echarts实现基本K线图的绘制
      目录1 引入Echarts1.1 安装1.2 引入1.3 基本使用2 基础K线图2.1 基础k线图2.2 基础日k图3 总结1 引入Echarts 1.1 安装 使用如下命令通过 n...
      99+
      2023-03-15
      Vue Echarts绘制K线图 Vue Echarts K线图 Vue K线图 Vue Echarts
    • 怎么使用Vue+Echarts实现绘制动态折线图
      今天小编给大家分享一下怎么使用Vue+Echarts实现绘制动态折线图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 引入...
      99+
      2023-07-05
    • 怎么使用vue+echarts绘制折线图、柱状图和扇形图
      这篇“怎么使用vue+echarts绘制折线图、柱状图和扇形图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用vue+...
      99+
      2023-07-05
    • Vue Echarts如何实现多功能图表绘制
      这篇文章主要介绍“Vue Echarts如何实现多功能图表绘制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue Echarts如何实现多功能图表绘制”文章能帮助大家解决问题。...
      99+
      2023-07-05
    • 怎么使用Vue+Echarts实现基本K线图的绘制
      本篇内容介绍了“怎么使用Vue+Echarts实现基本K线图的绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 引入Echarts1.1...
      99+
      2023-07-05
    • vue使用echarts绘制中国地图的实现代码
      1. 插入echarts 所需模块 import echarts from "echarts"; import 'echarts/map/js/china' // 使用中国地图需...
      99+
      2024-04-02
    • vue中怎么使用echarts和echarts-gl实现3D饼图环形饼图
      今天小编给大家分享一下vue中怎么使用echarts和echarts-gl实现3D饼图环形饼图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
      99+
      2023-07-05
    • vue+echarts怎么实现3D柱形图
      这篇文章主要介绍了vue+echarts怎么实现3D柱形图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue+echarts怎么实现3D柱形图文章都会有所收获,下面我们一起来看看吧。效果如下:1、安装echa...
      99+
      2023-06-29
    • C#怎么绘制实时曲线图
      这篇文章将为大家详细讲解有关C#怎么绘制实时曲线图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:        /...
      99+
      2023-06-29
    • vue怎么使用echarts实现折线图
      这篇文章主要讲解了“vue怎么使用echarts实现折线图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么使用echarts实现折线图”吧!效果图:代码:<template&g...
      99+
      2023-06-29
    • 怎么用Vue+Echarts实现简单折线图
      本文小编为大家详细介绍“怎么用Vue+Echarts实现简单折线图”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Vue+Echarts实现简单折线图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue+E...
      99+
      2023-06-29
    • Python怎么实现甘特图绘制
      这篇“Python怎么实现甘特图绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现甘特图绘制”文章吧。前...
      99+
      2023-07-06
    • vue+echarts怎么实现条纹柱状横向图
      这篇“vue+echarts怎么实现条纹柱状横向图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue+echarts怎么实...
      99+
      2023-06-29
    • vue怎么使用echarts实现立体柱形图
      今天小编给大家分享一下vue怎么使用echarts实现立体柱形图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。立体柱形图是由...
      99+
      2023-06-29
    • vue怎么实现复制文字和图片
      本篇内容主要讲解“vue怎么实现复制文字和图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现复制文字和图片”吧!document.execCommand('copy'...
      99+
      2023-07-05
    • Python+matplotlib怎么实现绘制等高线图
      本篇内容主要讲解“Python+matplotlib怎么实现绘制等高线图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+matplotlib怎么实现绘制等高线图”吧!1. 等高线图概...
      99+
      2023-06-21
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作