欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Echart Bar双柱状图样式最全详解

程序员文章站 2022-07-07 21:02:01
目录1. 安装 echarts2. 全局引入 echarts3. 按需引入 echarts前言在最近的项目中,有可视化图表的需求,第一时间就想到了echarts和hightcharts。要用到的可视化...

前言

在最近的项目中,有可视化图表的需求,第一时间就想到了echarts和hightcharts。

要用到的可视化图表都是比较常见的,echarts文档和实例都比较全面,而且还是中文的,方便阅读,于是选择了echarts。

echarts的图表样式如果是自用,肯定是没啥问题的,但是 ui 肯定是不满意的,于是进行了一系列的样式调整...

安装及配置

前端框架为easywebpack-vue,使用的echarts版本为^5.0.1

echarts 官方文档: …

1. 安装 echarts

npm install echarts --save

2. 全局引入 echarts

在 main.js 加入如下代码:

import * as echarts from "echarts";
vue.prototype.$echarts = echarts;

3. 按需引入 echarts

(1)新增 echarts.js 文件

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口
import * as echarts from "echarts/core";

// 引入各种图表,图表后缀都为 chart
import { barchart, linechart, piechart } from "echarts/charts";

// 引入提示框,标题,直角坐标系等组件,组件后缀都为 component
import {
  titlecomponent,
  tooltipcomponent,
  toolboxcomponent,
  gridcomponent,
  legendcomponent,
  axispointercomponent,
  datasetcomponent,
} from "echarts/components";

// 引入 canvas 渲染器,注意引入 canvasrenderer 或者 svgrenderer 是必须的一步
import { svgrenderer } from "echarts/renderers";

// 注册必须的组件
echarts.use([
  barchart,
  linechart,
  piechart,

  titlecomponent,
  tooltipcomponent,
  toolboxcomponent,
  gridcomponent,
  legendcomponent,
  axispointercomponent,
  datasetcomponent,

  svgrenderer,
]);

export default echarts;

(2)在 main.js 文件中引入

import echarts from "./utils/echarts";
vue.prototype.$echarts = echarts;

使用举例

<template>
  <div id="charts" style="width: 600px; height: 400px"></div>
</template>

<script>
  import * as r from "ramda";

  export default {
    mounted() {
      this.initcharts();
    },
    methods: {
      initcharts() {
        let charts = this.$echarts.init(document.getelementbyid("charts"));
        let option = {
          title: {
            text: "逐月消费趋势", // 标题
            subtext: "柱状图", // 副标题
          },
          xaxis: {
            type: "category",
          },
          yaxis: {
            type: "value",
          },
          color: ["#1890ff", "#52c41a", " #faad14"], // 柱状图颜色
          dataset: {
            source: [
              // 数据源
              ["1月", 1330, 666, 560],
              ["2月", 820, 760, 660],
              ["3月", 1290, 1230, 780],
              ["4月", 832, 450, 890],
              ["5月", 901, 880, 360],
              ["6月", 934, 600, 700],
            ],
          },
          series: [
            // 图标列设置
            { type: "bar", stack: "total", name: "苹果" },
            { type: "bar", stack: "total", name: "梨子" },
            { type: "bar", stack: "total", name: "桃子" },
          ],
          tooltip: {
          // 提示框组件
          }
        };
        charts.setoption(option);
      },
    },
  };
</script>

<style lang="scss" scoped></style>

原始效果展示:

Echart Bar双柱状图样式最全详解

改造后目标效果展示:

Echart Bar双柱状图样式最全详解

样式优化

x 轴基础样式

基础设置如下所示,可设置刻度和轴线相关的属性

xaxis: {
  type: "category",
  boundarygap: true, // 坐标轴两边留白策略,默认为true
  axistick: { // 刻度
    show: false,
  },
  axislabel: { // 刻度标签
    color: "#808080",
    fontsize: 12,
    margin: 8, // 刻度标签与轴线之间的距离
    interval: "auto", // x轴标签显示间隔,自动
  },
  axisline: { // 轴线
    linestyle: {
      color: "#c3c3c3",
      width: 0.5,
    },
  },
  splitline: { // 分割线
    show: false,
    interval: "auto",
  },
  splitarea: { // 分割区域
    show: false,
    areastyle: {},
  },
},

最大和最小刻度标签

主要属性是interval,要设置的足够大,比正常展示的刻度个数大一些,就能实现只展示最大和最小刻度标签

xaxis: {
  axislabel: {
    // interval: "auto",
    interval: 50, // 只显示最大和最小坐标
    showminlabel: true, // 显示最小刻度标签
    showmaxlabel: true, // 显示最大刻度标签
  }
}

Echart Bar双柱状图样式最全详解

series 数据列悬浮高亮

const stackbarseries = {
  type: "bar", // 柱状图
  barwidth: 32, // 柱体宽度
  stack: "total", // 数据堆叠
  showbackground: false, // 是否显示柱条背景色
  // 高亮的图形样式和标签样式
  emphasis: {
    // 鼠标hover时,同业务项高亮,其他项淡出图形
    // focus: "series",
    // 默认配置,仅当前hover数据淡出
    focus: "none",
  },
};

let option = {
  series: r.map(
    (o) =>
      r.merge(stackbarseries, {
        name: o,
      }),
    ["苹果", "梨子", "桃子"]
  ),
};

Echart Bar双柱状图样式最全详解

坐标指示器背景渐变色

主要是设置tooltip提示框组件的trigger,让 x 轴悬浮触发;然后设置xaxis的坐标指示器axispointer,指示器遮罩样式shadowstyle可以设置渐变色

let option = {
  tooltip: {
    // 提示框组件
    trigger: "axis", // 坐标轴触发
  },
  xaxis: {
    // 坐标轴指示器
    axispointer: {
      type: "shadow",
      // 坐标轴指示器的 z 值,控制图形的前后顺序
      z: 1,
      // 指示器遮罩样式
      shadowstyle: {
        // 解决hover背景色渐变问题
        color: {
          type: "linear",
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorstops: [
            {
              offset: 0,
              color: "rgba(234,244,255,1)", // 0% 处的颜色
            },
            {
              offset: 1,
              color: "rgba(234,244,255,0.3)", // 100% 处的颜色
            },
          ],
          global: false, // 缺省为 false
        },
        // 设置背景色及阴影
        // color: "rgba(234,244,255,1)",
        // opacity: 1,
        // shadowcolor: "rgba(0, 0, 0, 0.5)",
        // shadowblur: 10,
        // shadowoffsetx: 10,
        // shadowoffsety: 10,
      },
    },
  },
};

Echart Bar双柱状图样式最全详解

tooltip 提示框自定义样式

tooltip默认的样式或者值可能不符合开发的要求,可以使用formatter函数自定义处理

let option = {
  tooltip: {
    // 提示框组件
    trigger: "axis", // 坐标轴触发
    padding: [20, 16, 12, 16],
    backgroundcolor: "#fff",
    alwaysshowcontent: false,
    formatter: function(params) {
      let html = `<div style="height:auto;width: 163px;">
          <div style="font-size:14px;font-weight:bold;color:#333;margin-bottom:16px;line-height:1;">
            ${params[0].axisvalue}
          </div>
          ${params
            .map(
              (
                item
              ) => `<div style="font-size:12px;color:#808080;margin-bottom:8px;display:flex;align-items:center;line-height:1;">
                <span style="display:inline-block;margin-right:8px;border-radius:6px;width:6px;height:6px;background-color:${
                  item.color
                };"></span>
                ${item.seriesname}
                <span style="flex:1;text-align:right;">¥${item.value[
                  item.encode.y[0]
                ] || 0}</span>
              </div>`
            )
            .join("")}
            <div style="display:flex;align-items:center;justify-content:space-between;font-size:12px;color:#333;padding-top:4px;margin-bottom:8px;line-height:1;">
            <span>总计</span>
            <span>¥${r.reduceright(
              r.add,
              0,
              r.drop(1, params[0].value || [])
            )}</span>
          </div>
        </div>`;
      return html;
    },
  },
};

Echart Bar双柱状图样式最全详解

y 轴基础样式

let option = {
  yaxis: {
    type: "value",
    mininterval: 100,
    namegap: 8,
    axislabel: {
      color: "#808080",
      fontsize: 10,
      // formatter: (value) => {
      //   return moneyformatvalue(value);
      // },
    },
    splitline: {
      linestyle: {
        type: "dashed",
        color: "#ebebeb",
        width: 0.5,
      },
    },
  },
};

Echart Bar双柱状图样式最全详解

legend 图例样式自定义

let option = {
  grid: {
    left: 0,
    right: 12,
    bottom: 0,
    top: 68,
    containlabel: true,
  },
  // 图例设置
  legend: {
    top: 32,
    left: -5,
    icon: "circle",
    itemheight: 6, // 修改icon图形大小
    itemgap: 24,
    textstyle: {
      fontsize: 12,
      color: "#333",
      padding: [0, 0, 0, -8], // 修改文字和图标距离
    },
  },
};

Echart Bar双柱状图样式最全详解

总结

到此这篇关于echart bar双柱状图样式的文章就介绍到这了,更多相关echart bar双柱状图样式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!