Echarts实现柱状图下钻功能

article/2025/9/12 19:17:57

需求描述

在一个类别柱状图上,点击柱状图上的某一类后可显示该类具体的数据。

钻取的定义

钻取是改变维的层次,变换分析的粒度。包括向上钻取(drill up)和向下钻取(drill down).drill up 是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而drill down则相反,它从汇总数据深入到细节数据进行观察或增加新维。

基本实现方式

  • Highcharts是一个用纯JavaScripts编写的一个图表库。可简单便捷的在web网站添加有交互性的图表。
    实现效果图:
    下钻前:
    这里写图片描述
    下钻后:
    这里写图片描述
  • echarts
    Echarts本身并没有像HighCharts直接实现柱状图的下钻功能,但Echarts可以通过setOptions间接实现下钻功能。
    通过点击月份柱状图的某一月,触发点击事件,点击事件的功能是销毁该Echarts实例,并会向后台请求该月份的数据,当后台返回数据后,进行重新初始化Echarts实例。
    实现效果如下:

下钻前
下钻后

实现细节

前端部分

  • html代码
<!DOCTYPE html>
<html style="height: 100%"><head><meta charset="utf-8"> </head><body style="height: 100%; margin: 0"><div style="margin-left:40%;margin-top:2%"><button id='return-button' value=''>back to things</button>       </div><div id="container" style="height: 50%;width: 50%"></div><script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts-all-3.js"></script><script type="text/javascript" src="./drillDown.js"></script><script type="text/javascript" src="./return-button.js"></script></body>
</html>
  • js代码
var drillDown = {getOption : function () {var option = null;option = {title: {text: 'Basic drilldown',left: 'center'},legend: {left: 'left',data: ['category']},xAxis: {type: 'category',data: ['Animals', 'Fruits', 'Cars']},               yAxis: {type: 'value'},series: [{name: 'category',type: 'bar',data: [5,2,4]}]};return option;},initChart : function (myChart,option) {myChart.setOption(option);myChart.on('click',function(object){// 销毁之前的echarts实例echarts.dispose(dom);// 初始化一个新的实例var myChart = echarts.init(dom);// object为当前的这个echart对象,大家可以自己打印出来看看// console.dir(object);// $.ajax(//     type : 'get',//     url : interfaceUrl + '&category=' + object.name, // 此处可以替换为你的接口地址//     dataType : 'json',//     success : function (msg){//         option.xAxis.data = msg.xAxis;//         option.series[0].data = msg.yAxis[0];//         myChart.setOption(option, true);//     }// );console.dir(object.name);if (object.name == "Animals"){option.xAxis.data = ['Cats','Dogs','Cows','Sheep','Pigs'];option.series[0].data = [4,2,1,2,1];option.legend.data= ['Animals'];option.series[0].name=['Animals'];}if (object.name == "Fruits"){option.xAxis.data = ['Apples','Oranges'];option.series[0].data = [4,2];option.legend.data= ['Fruits'];option.series[0].name=['Fruits'];}if (object.name == "Cars"){option.xAxis.data = ['Toyota','Opel','Volkswagen'];option.series[0].data = [4,2,2];option.legend.data= ['Cars'];             option.series[0].name=['Cars'];}             myChart.setOption(option, true);});},
};

后端接口

@RequestMapping("getCategory.do")
@ResponseBody
public ServerResponse addCategory(HttpSession session){Map<String, Object>  map  =  new HashMap<>(); ResultBean result = onGetCategory(); out.println("result==>"  + result); map.put("xAxis", result.category());                            map.put("yAxis", result.value()); return map;}
}@RequestMapping("getNameAndNumByCategory.do")
@ResponseBody
public ServerResponse getNameByCategory(HttpSession session,String Category){Map<String, Object>  map  =  new HashMap<>(); ResultBean result = getNameByCategory(Category); out.println("result==>"  + result); map.put("xAxis", result.Name());                            map.put("yAxis", result.value()); return map;}}

接口定义

1.获得全部种类及数量
/getCategory.do

  • request
    /

  • response
    {
    “xAxis”:[“Animals”,”Fruits”,”Cars”],
    “yAxis”:[5,2,4]
    }

2.获得每一类的详细内容
/getNameAndNumByCategory.do

  • request
    category

  • response
    {
    “xAxis”:[“Cats”,”Dogs”,”Cows”,”Sheep”,”Pigs “],
    “yAxis”:[4,2,1,2,1]
    }

这里没有具体实现全部代码,而是使用简单的伪代码描述了后台接口实现思路。

数据要求

数据表可以可以按如下设计:

IDcategorynamenum
1AnimalsCats4
2AnimalsDogs2
3AnimalsCows1
4AnimalsSheep2
5AnimalsPigs1
6FruitsApples4
7FruitsOranges2
8carsToyota4
9carsOpel2
10carsVolkswagen2

总结

  • 以上简要叙述了需求以及实现的基本思想。
  • 使用静态数据实现了一个样例,具体实现还要后端接口的配合
  • 这里介绍了接口的设计思想
  • 以上内容参考了折线图下钻功能的实现https://github.com/phping1/echarts3-line-drilldown

  • 查看本项目可访问https://github.com/LiFH/bar-drilldown-master.git


http://chatgpt.dhexx.cn/article/U8f1yeqw.shtml

相关文章

Highcharts实现下钻多柱series

钻取功能需要引入或注册额外的功能模块&#xff0c;链接是官方模块的引入文档。 前言 Highcharts实现下钻动态添加多个series 实现 <template><divref"chartRef"style"height:300px;width:800px"></div> </template><script…

手把手教你实现echarts3的折线图下钻drilldown功能系列篇二

开场白 好了, 上一篇介绍了关于echarts下钻&#xff08;drilldown&#xff09;的一些信息&#xff0c;通过上一篇文章我们知道echarts折线图&#xff0c;柱状图没有支持下钻&#xff08;drilldown&#xff09;功能的api&#xff0c;那就需要我们自己动手&#xff0c;丰衣足食了…

Kibana:在 Kibana 中对数据进行深入分析 (drilldown)

我们可以在 Kibana 中对数据进行分析&#xff0c;并生产表格等。我们是否可以为我们展示的数据生产超链接呢&#xff1f;比如&#xff1a; 在我们上面的表格中在左边的表格中&#xff0c;上面所示的 US 是一个超链接。我们点击这个超链接后&#xff0c;它会帮我们启动一个搜索。…

Kibana:使用 drilldown 从一个仪表板切换到另外一个仪表板

Drilldowns&#xff08;也称为自定义操作&#xff09;使你可以配置工作流以对数据进行分析和故障排除。 使用 drilldowms&#xff0c;你可以从一个仪表板导航到另一个仪表板&#xff0c;并随身携带当前时间范围&#xff0c;过滤器和其他参数&#xff0c;因此上下文保持不变。 你…

Kibana:Drilldown 中的 URL 模板

警告&#xff1a;此功能处于 beta 版本&#xff0c;可能会更改。 该设计和代码不如正式的 GA 功能成熟&#xff0c;并且按原样提供&#xff0c;不提供任何担保。 Beta 功能不受官方 GA 功能的支持 SLA 约束。此功能在 7.11 及以上版本提供。 URL 模板 输入使用 Handlebars&…

highchart图表drilldown钻取功能及event点击事件添加(1)

最近做的一个需求是这样的&#xff0c;大类图表柱状图列出来&#xff0c;点击柱状图列出对应子类柱状图&#xff0c;后点击子类的柱状图后跳转到一个新页面列出两个饼状图 我是这么实现的&#xff1a;&#xff08;部分代码demo,饼状图页面为detailChart.html,随便找了个例子顶…

Kibana:为 table 创建链接 drilldown - 7.11 版本

在之前的文章 “Kibana&#xff1a;为 Dashboard 创建链接 drilldown - 7.11 版本”&#xff0c;我为大家介绍了如何使用带参数的 URL drilldown。在很多的时候&#xff0c;在 dashboard 中&#xff0c;有 table 的可视化。那么我们将如何为 table 中的项提供可视化呢&#xf…

下钻图生成 highcharts-column-drilldown

下钻图生成 highcharts-column-drilldown 功能 使用python生成下钻图 来源&#xff1a;https://www.highcharts.com.cn/demo/highcharts/column-drilldown 下钻层数由具体的输入决定&#xff0c;理论上可以无限下钻&#xff0c;不过下钻的层数越深也就意味着需要计算的时间越…

Kibana:为 Dashboard 创建链接 drilldown - 7.11 版本

我在之前的文章 “Kibana&#xff1a;使用 drilldown 从一个仪表板切换到另外一个仪表板” 展示了如何在 dashboard 里使用 drilldown 从一个仪表板到另外一个仪表板的跳转。在今天的文章中&#xff0c;我将介绍如何创建一个链接 drilldown 从而实现从 dashboard 到一个链接的跳…

终极玩转Power BI中Drill-down Choropleth 地图

故事背景 最近有个Power BI的项目有个功能点&#xff0c;颇令我头痛&#xff0c;说来话长&#xff0c;先捋一下需求&#xff1a; 1&#xff0c; 中国地图&#xff08;包含港澳台&#xff09; 2&#xff0c; 可以下钻到省市级&#xff0c;而且是中国->Region->Area->城…

C语言计算阶乘及阶乘的和

计算 n的阶乘。要实现这个阶乘的值并不难&#xff0c;只需要运用到for循环依次相乘即可&#xff0c;但要注意for循环i的初始值一定是从1开始到n结束。 #include<stdio.h> int main() {int i,n;int ret 1;//用于存放阶乘的值scanf("%d", &n);for (i 1; i…

c语言求阶乘的两种算法(递归和循环)

循环法 循环法还是比较简单的&#xff0c;很常规&#xff0c;就先输入你要求的阶乘n&#xff0c;然后一直自减 #include <stdio.h> main() {long n,sum1;//10 以上的阶乘就比较大了&#xff0c;所以用longint i;printf("请输入你要求的阶乘呀&#xff1a;");…

【C语言】求一个数的阶乘

#include <stdio.h> //包含标准库的信息int main(void) //每个程序都从main函数的起点开始执行 { //函数开始int p 1;int n;printf("请输入所求阶乘&#xff1a;\n");scanf("%d",&…

C语言求1到20的阶乘之和

#include<stdio.h>int main() {int i, j;long long sum 0, jieCheng;for (i 1; i < 20; i){jieCheng 1;for (j 1; j < i; j){jieCheng * j;}sum jieCheng;}printf("%lld", sum);return 0; }

C语言基础 阶乘:输入一个数,输出它的阶乘。

升级打怪 C语言基础第一题 题目&#xff1a; 输入一个数字&#xff0c;输出它的阶乘。 求阶乘有很多种方法&#xff0c;我下面来例举一种使用while语句的方法&#xff01; 1.首先定义变量&#xff1b; 2.输入所要求的阶乘&#xff1b; 3.使用while循环 fact*i 就是 fac…

阶乘求和 C语言实现求阶乘之和 三种方法实现 先阶乘再累加

题目&#xff1a; 此处题目是以1-20的阶乘之和举例 方法一&#xff1a;使用一层for循环实现 代码简单快捷容易理解 代码示例如下&#xff1a; #include<stdio.h> int main() {double a 1, sum 0;//因为最后值可能会超出int所能接收的范围 故用doubleint n, i;scanf…

C语言 求n的阶乘及阶乘和

题目 随机输入一个整数n&#xff0c;求出n的阶乘 思路 阶乘&#xff0c;每次乘的数依次递增&#xff0c;直到第n个数&#xff0c;因此我们可以设置一个变量result&#xff0c;用于储存每一次的运算结果。且每次乘的数都依次递增&#xff0c;可以使用for循环语句&#xff0c;…

C语言:运用函数实现阶乘

第一次写的时候&#xff0c;输出一直输出的为初始值&#xff0c;没有输出阶乘后的值&#xff0c;找了好久问题才发现&#xff0c;下次一定注意 编程时要考虑到0和1的阶乘 代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int JC(int num) {in…

【C语言】求阶乘与阶乘之和

中学我们都学习了阶乘的求法&#xff0c;比如要求整数&#xff4e;的阶乘&#xff0c;则&#xff4e;!n(n-1)(n-2)…21。现在有两个问题&#xff0c;要用&#xff23;语言编写程序求&#xff4e;的阶乘&#xff0c;以及求1!2!3!…n!&#xff0c;该如何解决呢&#xff1f;   …

【C语言】阶乘实现

&#x1f389;博客主页&#xff1a;Luo-Kuang-何 &#x1f389;座右铭&#xff1a;一起走向人生巅峰的路上&#x1f601; &#x1f389;学习进度&#xff1a;【C语言】 &#x1f389;博客声明&#xff1a;我将尽我所能&#xff0c;用心写好每一份博客&#xff0c;让更多小伙伴能…