ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动

代码如下:
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>ECharts</title>
    <!-- <script src="http://echarts.baidu.com/dist/echarts.min.js"></script>  -->
    <script src="https://cdn.bootcss.com/echarts/4.0.2/echarts.js"></script>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    您选择了X轴的标签[<span id="xAxisTag"></span>],他的值为[<span id="barValue"></span>]
    <input type="submit" name="" value="刷新" onclick="refreshBar()">
    </br>
    <div id="bar" style="width: 600px;height:400px;float:left;"></div>

    <div id="pie" style="width: 600px;height:400px;float:left;"></div>    

</body>
<script type="text/javascript">

  function randGenerator(n, sum) {
     //js生成n个和为固定sum的随机整数
     //https://blog.csdn.net/smartcore/article/details/72934272

      var aryRet = [];
      var fSumTmp = sum;
      var iAcc = 0;
      for (var i = 0; i < (n -1); i++) {
        var iTmp = Math.ceil(Math.random() * (fSumTmp / 2));
        aryRet.push(iTmp);
        fSumTmp -= iTmp;
        iAcc += iTmp;
      }
      aryRet.push(sum-iAcc);
  return aryRet;
}  

  function getSeriesData(){

      //根据js方法本身的加载顺序,此方法需要定义在myChart前面
      //此处可以通过后台生成数据,这样后台就无需返回整个option,只需要返回动态的数据部分即可
      // $.ajax({
      //     type: ‘GET‘,
      //     url: "getSeriesData",
      //     cache: false,
      //     async : false,
      //     dataType: ‘json‘,
      //     success: function (result) {
      //         seriesdata = result;
      //     },
      //     error: function (result, XMLHttpRequest, textStatus, errorThrown) {
      //         // 状态码
      //         // console.log(XMLHttpRequest.status);
      //         // console.log(XMLHttpRequest.toLocaleString());
      //         // 状态
      //         // console.log(XMLHttpRequest.readyState);
      //         // 错误信息
      //         // console.log(textStatus);
      //     }
      // });

        //var n1 = Math.floor(Math.random()*500+1);
        //var n2 = Math.floor(Math.random()*500+1);
        //var n3 = Math.floor(Math.random()*500+1);
        //var n4 = Math.floor(Math.random()*500+1);
        //var n5 = Math.floor(Math.random()*500+1);
        //var n6 = Math.floor(Math.random()*500+1);
        //seriesdata = [n1, n2, n3, n4, n5, n6];

        seriesdata = randGenerator(6, Math.floor(Math.random()*500+1));

      return seriesdata;
  }  

  function getxAxisData(){
    //同样适用以ajax的方式从后台获取数据
    xAxisData = ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"];
    return xAxisData;
  }

  function getSaleOption(){
      saleSeriesData = getSeriesData();
      saleOption = {
            title: {
                text: ‘ECharts 入门示例‘
            },
            tooltip: {},
            legend: {
                data:[‘销量‘,"趋势"]
            },
            xAxis: {
                // data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
                data : getxAxisData(),
                triggerEvent:true,
                axisTick: {
                    alignWithLabel: true //坐标值是否在刻度中间
                }

            },
            yAxis: {triggerEvent:true},
            series: [{
                name: ‘销量‘,
                type: ‘bar‘,
                //data: [n1, n2, n3, n4, n5, n6],
                //data : seriesdata,
                //data : getSeriesData(),
                data : saleSeriesData,
                itemStyle: {
                    normal: {
                        color: function(params) {
                      var colorList = [‘#2eddc1‘,‘#FCCE10‘,‘#E87C25‘,‘#277bbb‘,‘#E87fff‘,‘#277aaa‘];
                            //若返回的list长度不足,不足部分自动显示为最后一个颜色
                        return colorList[params.dataIndex]
                      },
                        label: {
                            show: true,
                            position: ‘top‘
                        }
                    }
                }
            },{
                name: ‘趋势‘,
                type: ‘line‘,
                //data: getSeriesData(),
                data : saleSeriesData,
                smooth:false,   //是否为曲线,默认为false
                itemStyle:{
                    normal:{
                        lineStyle:{
                            width:1,       // 虚线的宽度
                            type:‘dotted‘  //‘dotted‘虚线 ‘solid‘实线
                        }
                    }
                }
            }]
        };

        return saleOption;
  }

  function getSalePieOption(){
    salePieOption = {
                "legend":{
                    "orient":"vertical",
                    "left":"left"
                },
                "series":[
                    {
                        "data":[],
                        "center":[
                            "50%",
                            "60%"
                        ],
                        //"name":"访问来源",
                        "itemStyle":{
                            "normal":{
                                "label":{
                                    "formatter":"{b}\n{c}\n{d}%",
                                    "show":true
                                }
                            },
                            "emphasis":{
                                "shadowOffsetX":0,
                                "shadowBlur":10,
                                "shadowColor":"rgba(0, 0, 0, 0.5)"
                            }
                        },
                        "radius":"55%",
                        "type":"pie"
                    }
                ],
                "tooltip":{
                    "formatter":"{a} <br/>{b} : {c} ({d}%)",
                    "trigger":"item"
                },
                "title":{
                    //"subtext":"纯属虚构",
                    "x":"center",
                    "text":""
                }
            };

    return salePieOption;
  }

  function refreshPieData(name, value){

    data = randGenerator(7,value);
    salePieOption.title.text = name;
    salePieOption.title.subtext = "销售额:"+value;

    salePieData =[
                {
                    "name":"周一",
                    "value":data[0]
                },
                {
                    "name":"周二",
                    "value":data[1]
                },
                {
                    "name":"周三",
                    "value":data[2]
                },
                {
                    "name":"周四",
                    "value":data[3]
                },
                {
                    "name":"周五",
                    "value":data[4]
                },
                {
                    "name":"周六",
                    "value":data[5]
                },
                {
                    "name":"周日",
                    "value":data[6]
                }

            ]
    salePieOption.series[0].name = "销售比";
    salePieOption.series[0].data = salePieData;

  } 

</script>
<script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myBarChart = echarts.init(document.getElementById(‘bar‘));

        // 指定图表的配置项和数据
        var option = getSaleOption();
        // 使用刚指定的配置项和数据显示图表。
        myBarChart.setOption(option);

        var myPieChart = echarts.init(document.getElementById(‘pie‘));

        var salePieOption = getSalePieOption();

        refreshPieData(option.xAxis.data[0], option.series[0].data[0]);

        myPieChart.setOption(salePieOption);

        myBarChart.on(‘click‘, function (params) {
            //param具体包含的参数见 https://blog.csdn.net/allenjay11/article/details/76033232
            updatePage(option.xAxis.data[params.dataIndex],params.value);

            refreshPieData(option.xAxis.data[params.dataIndex],params.value);

            myPieChart.setOption(salePieOption);
        });
    </script>

<script type="text/javascript">
  function updatePage(tag, value){
    var xAxisTag = $("#xAxisTag");
    xAxisTag.html(tag);
    var barValue = $("#barValue");
    barValue.html(value);
  };

  function refreshBar(){             

      //局部刷新series内容
      //此处没有用常用的刷新div等方法,而是直接改变了option的值,然后重新赋值给myChart

      //简化方法,调用getSeriesData更新数据。
      //option.series.data = getSeriesData();

      saleSeriesData = getSeriesData();

      option.series[0].data = saleSeriesData;
      option.series[1].data = saleSeriesData;

      myBarChart.setOption(option);

      //清空饼状图
      //salePieOption.title.text = "";
      //salePieOption.series[0].data = "";
      //salePieOption.series[0].name = "";
      //myPieChart.setOption(salePieOption);

      //刷新之后默认显示为柱状图的第一个对应的数据
      refreshPieData(option.xAxis.data[0], option.series[0].data[0]);
      myPieChart.setOption(salePieOption);

  }; 

</script>
</html>

显示效果:

原文地址:https://www.cnblogs.com/huanghongbo/p/9060220.html

时间: 2024-10-29 19:06:44

ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动的相关文章

折线图 饼状图 柱状图

xaml 文件 <Window x:Class="Supplier.TrendCharts" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="产品价格趋势图" Height="500" Width

图表echarts折线图,柱状图,饼状图

总体就是有折线图相关图标的设置,x,y轴的设置,x,y轴或者数据加上单位的设置.饼状图如何默认显示几个数据中的某个数据 折线图:legend(小标题)中间默认是圆圈 改变成直线 在legend设置的时候就改变icon的形状 legend: { data:[ { name:'访问次数', icon:'line' }, { name:'访', icon:'line' }, { name:'访问', icon:'line' }, ], textStyle:{ color:'#fff' }, right

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点.终止点(也称锚点)以及两个相互分离的中间点. 滑动两个中间点,贝塞尔曲线的形状会发生变化. UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 . 椭圆 或者 直线和曲线的组合形状 初始化方法: + (instancetype)bezierPath; /

JfreeChart在EXCEL中生成饼状图/柱状图/折线图

Maven <dependency> <groupId>jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.0.13</version> </dependency> Java import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.She

前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 Bootstrap 项目的开头包含下面的代码段. <!DOCTYPE html> <html> .... </html> Bootstr

PHP实现动态生成饼状图、柱状图和折线图(转载)

PHP在图像操作方面的表现非常出色,我们只需借助可以免费得到的GD库便可以轻松实现图.表勾画.下面将分别介绍PHP实现的饼状图.折线图和柱状图以 及他们的使用方法,这几段代码的特点就是不需要再把它们复制到你的代码之中,只需要把计算得到的数据作为参数传入,即可得到相应的图形效果 代码中所有使用的函数的说明,请参见php开发文档 饼状图 设计思路 饼状图表对于查看一个值占总值的百分比是一个好的方法.我们就用PHP来实现一个饼形图表. 它的设计思想是: 1 接受参数,得到所有数值的和,得到每一个值占数

C#+JQuery+.Ashx+百度Echarts 实现全国省市地图和饼状图动态数据图形报表的统计

在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界面优美.由于客户是淘宝卖家,因此想要实现每个月全国各个省份各自购力如何,大家可以统计其他的,如果GDP 人口 等等. 百度echarts简介请参考 http://echarts.coding.io/doc/example.html 效果图如下:全部是动态数据 JS代码: <!-- Charts La

用FusionChartsFree做饼状图、柱状图、折线图的实例

1.先来看看要进行表现的页面:myChart.jsp <%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/

Echarts生成饼状图、条形图以及线形图 JS封装

1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Created by Administrator on 2015/8/7. */ var charec; // 路径配置 require.config({ paths: { echarts: 'http://echarts.baidu.com/build/dist' } }); // 按需加载所需图表 r