接上一篇# Echart Bar柱状图样式详解续写,可以先看看上一篇,不看的话,影响也不是特别大。

横向柱状图

动态更新数据和样式

实现数据按月统计和按日统计的动态切换。按月统计时,每个月数据都会展示,x 轴显示 12 个标签;按日统计时,x 轴不完全显示所有标签,间隔显示,而且柱状体的宽度也会变化。主要是采用的是setOption方法。

官方文档[setOption]:echarts.apache.org/zh/api.html…

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

  const source1 = [
    ["1月", 1330, 666, 560],
    ["2月", 820, 760, 660],
    ......
    ["11月", 901, 880, 360],
    ["12月", 934, 600, 700],
  ];
  const source2 = [
    ["1日", 1330, 666, 560],
    ["2日", 820, 760, 660],
    ......
    ["29日", 934, 600, 700],
    ["30日", 1330, 666, 560],
  ];

  // 具体配置如之前所示,详细省略,只做基本示例展示
  const initOption = {
    ...
    dataset: { source: source1 },
  };

  export default {
    data() {
      return {
        charts: null,
        isDaily: false,
      };
    },
    mounted() {
      this.charts = this.$echarts.init(
        document.getElementById("barCharts"),
        null,
        {
          renderer: "svg",
        }
      );
      this.charts.setOption(R.clone(initOption));
    },
    methods: {
      handleSource() {
        this.isDaily = !this.isDaily;
        this.charts.setOption(
          R.mergeDeepRight(initOption, {
            // 动态更新数据源
            dataset: {
              source: this.isDaily ? source2 : source1,
            },
            xAxis: {
              // 动态更新标签间隔
              axisLabel: {
                interval: this.isDaily ? 4 : "auto",
              },
            },
            series: R.map(
              // 动态更新柱体宽度
              (o) => ((o.barWidth = this.isDaily ? 12 : 24), o),
              initOption.series
            ),
          }),
          true
        );
        this.charts.resize();
      },
    },
  };
</script>

解决 echarts 宽高自适应问题

在 web 项目中做图表时,图表的宽高不是固定的,需要随着浏览器宽度高度自适应,使用的方法就是resize。如果有多个图表,需要同时进行resize处理。

<script>
  export default {
    mounted() {
      window.addEventListener("resize", this.handleResize, false);
    },
    destroyed() {
      window.removeEventListener("resize", this.handleResize);
    },
    methods: {
      handleResize() {
        const _this = this;
        const timer = setTimeout(() => {
          _this.lineCharts.resize();
          _this.barCharts.resize();
        }, 500);
        // 清除定时器
        this.$once("hook:beforeDestroy", () => {
          setTimeout(timer);
        });
      },
    },
  };
</script>

纵向柱状图

纵向柱状图实现

本质和横向是一样的,就是将 x,y 轴值更换一下;x 轴为value,y 轴为category

let option = {
  xAxis: {
    type: "value",
  },
  yAxis: {
    type: "category",
  },
};

坐标指示器背景渐变色

其实原理和横向的一样,就是渐变色处理的地方 x,y 值更换一下

let horizontalColor = {
  type: "linear",
  x: 1, // 更换
  y: 0,
  x2: 0,
  y2: 0, // 更换
  colorStops: [
    { offset: 0, color: "rgba(234,244,255,1)" },
    { offset: 1, color: "rgba(234,244,255,0.3)" },
  ],
  global: false,
};

柱体设置不同颜色

柱体的属性设置series中color可以是一个函数,在函数中处理。核心代码为colorList[params.dataIndex]

let colorList = [
  "#1890ff",
  "#52c41a",
  "#faad14",
  "#f5222d",
  "#1DA57A",
  "#d9d9d9",
];
let series = [
  {
    type: "bar",
    barWidth: 16,
    itemStyle: {
      // 定制显示(按顺序),实现不同颜色的柱体
      color: (params) => {
        return colorList[params.dataIndex];
      },
    },
    dimensions: ["类型", "销售数量"],
  },
];

柱状图上方显示数值

柱体的属性设置series中label可以是一个函数,在函数中处理。可以设置位置,字体颜色和大小等。核心代码为params.value[params.encode.x[0]]。

let series = [
  {
    // ......
    type: "bar",
    label: {
      // 柱图头部显示值
      show: true,
      position: "right",
      color: "#333",
      fontSize: "12px",
      formatter: (params) => {
        return params.value[params.encode.x[0]];
      },
    },
  },
];

tooltip 提示框自定义

和横向的一样,就是要注意取值params[0].axisValue, item.seriesName, item.value[item.encode.x[0]]

let tooltip = R.merge(tooltip, {
  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.x[0]]
                }</span>
              </div>`
            )
            .join("")}
        </div>`;
    return html;
  },
});

总体实现

charts.setOption({
  title: {
    text: "销售数量分布",
  },
  dataset: {
    source: [
      ["苹果", 200],
      ["桃子", 180],
      ["葡萄", 340],
      ["香蕉", 250],
      ["芒果", 166],
      ["榴莲", 185],
    ],
  },
  xAxis: R.merge(yAxis, {
    type: "value",
  }),
  yAxis: R.mergeDeepRight(xAxis, {
    type: "category",
    axisPointer: {
      shadowStyle: {
        color: horizontalColor,
      },
    },
  }),
  series,
  tooltip,
});

总结

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

Echarts Bar横向柱状图实例代码的更多相关文章

  1. html5中canvas图表实现柱状图的示例

    本篇文章主要介绍了html5中canvas图表实现柱状图的示例,本文使用canvas来实现一个图表,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 用swift实现navigation bar的完全透明 &amp; navigation bar中button的字体大小调整

    2>或者我们可以来改变这个返回按钮的样式,比如手动把它的文字字体大小调整下注意,因为我们其实是改变的UIBarButtonItem,所以,这段代码我们要放到Appdelegate中来实现。这样,所有的bar中的button类的字体都被强制设定为12号大小了

  3. swift – 如何解开任意类型的可选值?

    给定一个[Any]的数组,其中包含可选值和非可选值,例如:我们如何提取在Any类型(如果有)的Optional的值,所以我们可以创建一个通用打印函数,只打印出值。这个printArray函数遍历并打印每个元素:其中将输出:我们如何更改它,以便它只打印底层值,以便它解包的值,如果它是可选的?将总是解包任何类型。

  4. swift – 从常规方法调用协议默认实现

    我想知道是否可能实现这样的事情。它在某种程度上类似于调用super。类中的方法来满足实现每个属性的需求等,但是我看不到使用struct实现相同的可能性。我不知道你是否仍然在寻找这个答案,但方法是从协议定义中删除该函数,将对象转换为Foo,然后调用它的方法:由于某种原因,它只有在函数未声明为协议的一部分,而是在协议的扩展中定义时才有效。

  5. swift – 使用依赖于其他实例变量的值初始化惰性实例变量

    我已经例如尝试将getEventCalendar从方法转换为函数,但这也无济于事.你可以使用一次只执行的闭包来捕获self的属性并在执行时使用它们.例如.W.r.t.对于你自己的尝试:你可以以同样的方式在这个曾经执行过的闭包中使用self的帮助(实例)函数.

  6. 泛型 – 如何在Swift的泛型类上实现NSCoding?

    我在Swift中遇到泛型类和NSCoding问题.具体来说,这个示例代码很好地工作:但是,当我尝试相同的代码,并添加一个泛型参数;当我尝试编码对象;我收到一个’无法识别的选择器发送到实例’错误:以下是错误详细信息和堆栈跟踪:当我读到这一点,当类是通用的时,Swift无法调用encodeWithCoder的实现.它是否正确?为了在泛型类上使用NSCoding,我该如何解决这个问题?

  7. 在Swift 3中如何记录函数的闭包参数的参数?

    在Xcode8beta和Swift3中,当您有一个以闭包为参数的方法时,例如:如何记录关闭所需的参数?据我所知,如果您标记它们,您只能记录关闭参数:这是不太理想的:它强制您在调用闭包时使用参数标签,如果有命名冲突,似乎没有办法区分两者.编辑:as@Arnaud指出,您可以使用_来阻止在调用闭包时使用参数标签:事实上,这是Swift3中唯一有效的方法,因为参数标签不再是类型系统的一部分.

  8. 如何以即时模式从其他.swift文件中包含.swift文件?

    具有功能定义bar.swift的文件:一个脚本可以立即运行foo.swift:如何从foo.swift导入bar.swift的foo()函数?我认为现在的答案是你不能分割多个文件的代码,除非你编译代码.使用#!

  9. Swift枚举具有相同值的多个案例

    在C中,你可以使你的枚举有这个在迅速我想做相当的.但编译器抱怨说它不是唯一的.我如何告诉我,我想要两个案例具有相同的价值?我试过了和但它似乎不像我想要的那样工作.我感谢任何帮助.Swift不支持重复的值.如果您不介意,可以使用这样的东西来模拟它.

  10. swift – 有客观原因我不能拥有带元素标签的单元素元组吗?

    在Swift中直到并包括Swift3,我无法创建一个单元素元组,其中元素被命名.所以funcfoo()–>酒吧很好,而funcfoo()–>产生编译错误.但是,我可以想到这种模式的一些可能用途,例如:…这已经作为SwiftEvolution系统的一部分进行了讨论吗?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部