[email protected] - 旭日图+bar图 实现 小太阳

本文的源码直接戳文章最后,关注公众号,戳同样标题的文章,可获得下载链接。

先来看一下成品图:

 gif 使用的生成工具,地址戳这里icon-default.png?t=LA92https://dongci.kawo.com/?iao.su

这个图表的应用场景,我个人会偏向用于:事件总集的时候,以月份划分,可以用在移动端或者PC端,也可以加入 时间表盘 的概念。

 进入正题

这个小太阳图是一个 极坐标bar图 + 旭日图  的合成图。

既然我们能拆成这两种图表类型,那就可以直接开始做,先分别来实现一个旭日图和极坐标bar图。

接下来先进行前期的安装及挂载准备

npm install echarts

npm install vue-echarts



// main.js引入挂载:
import { createApp } from "vue";
import App from "./App.vue";
import ECharts from 'vue-echarts'
import { use } from "echarts/core";

// 手动引入 ECharts 各模块来减小打包体积
import {
    CanvasRenderer
} from 'echarts/renderers'
import {
    TooltipComponent,
} from 'echarts/components'

use([
    CanvasRenderer,
    TooltipComponent,
])

const app = createApp(App)
app.mount("#app");

// 全局注册组件(也可以使用局部注册)
app.component('v-chart', ECharts)

旭日图配置:

 option: {
        backgroundColor:"rgba(255,255,255,0)",
        toolbox: {
          feature: {
            saveAsImage: {},
          },
        },
        series: {
          type: "sunburst",
          data: data, // 数据此处省略,可以关注公众号获取本文源码 
          radius: [0, "95%"],
          sort: undefined,
          emphasis: {
            focus: "ancestor",
          },
          levels: [
            {},
            {
              r0: "15%",
              r: "35%",
              itemStyle: {
                borderWidth: 2,
              },
              label: {
                rotate: "tangential",
              },
            },
            {
              r0: "35%",
              r: "70%",
              label: {
                align: "right",
              },
            },
          ],
        },
      },

 极坐标bar图配置:

 

    option: {
        toolbox: {
          feature: {
            saveAsImage: {},
          },
        },
        grid: {
          show: false,
          top: 100,
        },
        angleAxis: {
          show: false,
          type: "category",
          data: cities,
        },
        tooltip: {
          show: true,
          formatter: function (params) {
            const id = params.dataIndex;
            return (
              cities[id] + "<br>Lowest:" + data[id][0] + "<br>Highest:" + data[id][1]
            );
          },
        },
        radiusAxis: {
          // show: false,
        },
        polar: {},
        series: [
          {
            type: "bar",
            itemStyle: {
              color: "transparent",
            },
            data: data.map(function (d) {
              return d[0];
            }),
            coordinateSystem: "polar",
            stack: "Min Max",
            silent: true,
          },
          {
            type: "bar",
            data: data.map(function (d) {
              return d[1] - d[0];
            }),
            coordinateSystem: "polar",
            name: "Range",
            stack: "Min Max",
          },
          {
            type: "bar",
            itemStyle: {
              color: "transparent",
            },
            data: data.map(function (d) {
              return d[2] - barHeight;
            }),
            coordinateSystem: "polar",
            stack: "Average",
            silent: true,
            z: 10,
          },
        ],
      },

两种图表结合后的绘制如下:

   <v-chart
      class="chart"
      autoresize
      :ref="refName"
      @mouseover="handlerMouseover"
      @mouseout="handlerMounseout"
      @click="handlerClick"
    />     

-------------JS-----------
option: {
        toolbox: {
          feature: {
            saveAsImage: {},
          },
        },
        grid: {
          top: 100,
        },
        angleAxis: {
          show: false,
          type: "category",
          data: lodash.uniq(lodash.map(new_data, "name")),
        },
        tooltip: {
          show: true,
          formatter: function (params) {
            const id = params.dataIndex;
            return `${params.name}:${new_data[id].value}`;
          },
        },
        radiusAxis: {
          show: false,
        },
        polar: {},
        series: [
          {
            type: "sunburst",
            data: sunburst_data,
            radius: [0, "95%"],
            sort: undefined,
            nodeClick: false,
            emphasis: {
              focus: "ancestor",
            },
            levels: [
              {},
              {
                r0: "10%",
                r: "20%",
                itemStyle: {
                  borderWidth: 2,
                },
                label: {
                  rotate: "tangential",
                },
              },
            ],
          },
          {
            type: "bar",
            itemStyle: {
              color: "transparent",
            },
            data: lodash.map(new_data, "start"),
            coordinateSystem: "polar",
            stack: "Min Max",
            silent: true,
          },
          {
            type: "bar",
            data: new_data,
            coordinateSystem: "polar",
            name: "Range",
            stack: "Min Max",
          },
        ],
      },

大家可以主要到 gif 动图中,鼠标悬浮在一级菜单时,是有交互的,这个交互需要用 JS来写,不能直接通过 echarts 的属性来进行操作配置。逻辑代码如下:

    const handlerMouseover = (e) => {
      if (e.seriesType === "sunburst") {
        handlerMounseout();
        lodash.map(
          lodash.filter(new_data, function (o) {
            return o.type !== e.name;
          }),
          function (d) {
            d.itemStyle.opacity = 0.5;
          }
        );
        dom.setOption(addData.option, true);
      }
    };

    const handlerMounseout = (e) => {
      lodash.map(new_data, function (a) {
        a.itemStyle.opacity = 1;
      });
      dom.setOption(addData.option, true);
    };

---------------说点题外话-----

echarts 是比较容易上手的做图表可视化的工具,很多日常常用的图表都可以满足,当然需要创造性地图表的话,可以用 D3 来做。

公众号放在下面啦,欢迎多多关注呀~

 

### 回答1: Vue 3.0 和 ECharts 5.0 是两个非常流行的前端框架和可视化库。Vue 3.0 于 2020 年正式发布,是 Vue.js 的最新版本。而 ECharts 5.0 则在 2020 年 12 月发布了正式版,是一款强大的可视化库。 Vue 3.0 带来了许多重大更新和改进,包括更好的性能、更好的开发体验、更好的 TypeScript 支持等。Vue 3.0 让开发人员能够更快地构建高性能的 Web 应用程序,同时也提供了更完善的生态系统,使得开发过程更加便捷和高效。 ECharts 5.0 是一款强大的可视化库,它提供了多种类型的表、地、关系等,使得开发人员能够快速创建出精美的可视化效果。ECharts 5.0 支持多种数据格式,包括 JSON、CSV、XML 等,同时也支持多种数据源,包括静态数据、API 接口、WebSocket 等。ECharts 5.0 还提供了丰富的表配置选项,使得开发人员能够轻松地定制各种流行的数据可视化效果。 Vue 3.0 与 ECharts 5.0 的结合,可以实现更加高效和优秀的数据可视化效果。Vue 3.0 的性能优化可以让 ECharts 5.0 更好地展示大量数据,同时 ECharts 5.0 的丰富表类型和选项,可以为 Vue 3.0 应用程序提供更加精细的数据呈现。 总的来说,Vue 3.0 和 ECharts 5.0 是两个非常优秀的前端框架和可视化库,它们的结合能够为开发人员提供更加高效、精细和出色的 Web 应用程序开发体验。 ### 回答2: Vue 3.0和Echarts 5.0是目前前端开发中非常流行的框架和库,分别用于开发Web页面和数据可视化Vue 3.0是Vue.js框架的最新版本,与先前版本相比有许多改进,例如更好的性能、更直接的响应式系统、更好的TypeScript支持等。Echarts 5.0是Apache开源项目Echarts的最新版本,它是一个基于JavaScript的可视化库,可以用来制作各种类型的表,如折线、柱状、饼、散点等。 Vue.js和Echarts可以非常好地结合使用。Vue.js可以帮助我们组织代码,将数据绑定到HTML标记中,处理事件和生命周期等。而Echarts可以让我们非常方便地制作表并将其展示在页面上。Vue.js的响应式数据和组件化的思想也与Echarts的数据驱动原则非常契合,两者可以无缝对接。 在使用Vue.js和Echarts时,我们可以通过Vue.js的组件化特性将Echarts作为Vue.js组件来实现。这样可以让我们在Vue.js中直接使用Echarts,而不需要手动编写JavaScript代码。另外,在Vue.js 3.0中,通过Composition API的支持,我们可以更加灵活地组织代码和处理数据,这也对于Echarts的使用提供了更多方便。 总之,Vue 3.0和Echarts 5.0是非常强大的前端开发工具,它们可以帮助我们快速地构建高性能的Web页面和数据可视化。在Vue.js和Echarts的结合使用中,可以通过组件化、响应式数据等特性实现代码的高效组织和数据的快速展示。 ### 回答3: Vue 3.0和Echarts 5.0是现在很火热的前端框架和可视化工具,在开发和设计方面都有很大的用途。 Vue 3.0具有更快的速度和更小的代码体积,采用了全新的响应式API和Composition API,这使得开发更加灵活方便。与此同时,Echarts 5.0则支持更多的表类型,具有更好的性能和更多的交互功能。它也增加了更多的自定义选项,允许用户按照自己的需要进行调整和设计。 Vue 3.0和Echarts 5.0的结合可以为开发者们提供更强大的可视化工具,从而可以更好地呈现数据和交互,同时也可以加速开发过程,减少代码量和时间成本。通过使用Vue 3.0和Echarts 5.0,开发者们可以快速地创建功能强大、适应性强的大型应用程序,并实现自己的数据可视化目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值