项目需要在网页上画图表,在网上找了一下,发现百度出品的echarts非常好用。echarts把看似复杂的图表进行了分解,使用结构化的模型来完成图表的配置。画图表就跟写CSS一样,实际上echarts使用的很多属性名字都和CSS是一样的。

echarts有非常详细的文档,官网还提供了很多个例子,很容易学会。

echarts是支持IE8的,虽然IE8不支持canvas,但是echarts画出的图表在IE8显示,目前没有发现有问题。

想学echarts,看官网的文档就可以了。以下是个人学习之后整理的helloworld小例子,以及学习过程中碰到的一些小问题。

1 画一个最粗糙的图表

官方推荐使用模块化单文件引入,我不知道模块化,所以采用了标签式单文件引入。

[html] view plaincopy
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>echarts测试</title>
  6. </head>
  7. <body>
  8. <!-- 第二步:为ECharts准备一个具备大小(宽高)的Dom -->
  9. <div id="main"
  10. style="height: 400px; width: 800px; border: 1px dotted black"></div>
  11. <!-- 第一步:标签式单文件引入。引入之后可以直接使用echarts对象。 -->
  12. <script src="../js/echarts-plain-original.js"></script>
  13. <!-- 注意顺序,使用echarts对象要在引入echarts文件之后 -->
  14. <script type="text/javascript">
  15. // 初始化一个图表实例
  16. var myChart = echarts.init(document.getElementById('main'));
  17. // echarts把复杂的图表结构化,图表的基本结构包括以下部分:标题,x轴,y轴,数值序列。
  18. var option = {
  19. // 标题
  20. title : {
  21. text : '销量和进货量'
  22. },
  23. // x轴
  24. xAxis : [ {
  25. type : 'category',
  26. data : [ "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子" ]
  27. } ],
  28. // y轴
  29. yAxis : [ {
  30. type : 'value',
  31. axisLabel : {
  32. formatter : '{value}件'
  33. }
  34. } ],
  35. // 数值序列
  36. series : [ {
  37. name : '销量',
  38. type : 'line',
  39. data : [ 5, 20, 40, 10, 10, 20 ],
  40. } ]
  41. };
  42. // 为图表实例加载数据
  43. myChart.setOption(option);
  44. </script>
  45. </body>
  46. </html>

得到的图表

2 为图表添加各种样式

[html] view plaincopy
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>echarts测试</title>
  6. </head>
  7. <body>
  8. <!-- 第二步:为ECharts准备一个具备大小(宽高)的Dom -->
  9. <div id="main"
  10. style="height: 400px; width: 800px; border: 1px dotted black"></div>
  11. <!-- 第一步:标签式单文件引入。引入之后可以直接使用echarts对象。 -->
  12. <script src="../js/echarts-plain-original.js"></script>
  13. <!-- 注意顺序,使用echarts对象要在引入echarts文件之后 -->
  14. <script type="text/javascript">
  15. // 初始化一个图表实例
  16. var myChart = echarts.init(document.getElementById('main'));
  17. // echarts把复杂的图表结构化,图表的基本结构包括以下部分:标题,x轴,y轴,数值序列。
  18. var option = {
  19. // 标题
  20. title : {
  21. text : '销量和进货量',
  22. x : 'center',
  23. y : 'top',
  24. textStyle : {
  25. fontSize : 26,
  26. fontFamily : "微软雅黑",
  27. }
  28. },
  29. //
  30. grid : {
  31. borderWidth : 0
  32. },
  33. tooltip : {
  34. trigger : 'axis',
  35. axisPointer : {
  36. type : 'line',
  37. lineStyle : {
  38. color : '#0f0',
  39. width : 2,
  40. type : 'solid'
  41. }
  42. }
  43. },
  44. // x轴
  45. xAxis : [ {
  46. type : 'category',
  47. data : [ "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子" ],
  48. axisTick : {
  49. show : false
  50. },
  51. splitLine : {
  52. lineStyle : {
  53. type : 'dotted'
  54. }
  55. }
  56. } ],
  57. // y轴
  58. yAxis : [ {
  59. type : 'value',
  60. axisLabel : {
  61. formatter : '{value}件'
  62. },
  63. splitLine : {
  64. lineStyle : {
  65. type : 'dotted'
  66. }
  67. }
  68. } ],
  69. // 数值序列
  70. series : [ {
  71. name : '销量',
  72. type : 'line',
  73. data : [ 5, 20, 40, 10, 10, 20 ],
  74. itemStyle : {
  75. normal : {
  76. color : '#f00',
  77. lineStyle : {
  78. width : 2
  79. },
  80. label : {
  81. show : true,
  82. position : 'right',
  83. textStyle : {
  84. fontStyle : 'bolder',
  85. fontSize : 15
  86. }
  87. }
  88. }
  89. },
  90. symbol : 'emptyCircle',
  91. symbolSize : 4,
  92. } ]
  93. };
  94. // 为图表实例加载数据
  95. myChart.setOption(option);
  96. </script>
  97. </body>
  98. </html>

加了样式之后的结果如下,我想说我很佩服做美工的同学(我自己画的图表真不好看)

3 为图表添加事件

[html] view plaincopy
  1. // 事件的参数中包括:数据在序列中的下标dataIndex,数据的值value,x轴上的名称name
  2. function eConsole(param) {
  3. if (typeof param.seriesIndex == 'undefined') {
  4. return;
  5. }
  6. if (param.type == 'click') {
  7. var mes = param.name + ':' + param.value;
  8. document.getElementById('info').innerHTML = mes;
  9. }
  10. }
  11. myChart.on(echarts.config.EVENT.CLICK, eConsole);

效果就是点击图表之后,可以在下面显示出被点击的类目和对应的数量

4 最后,做了一个小练习,使用jQuery来从服务端请求数据

这里,客户端的option一开始只有样式,没有数据。从服务端得到数据之后,把option补全,然后调用setOption方法就OK了。

[html] view plaincopy
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <script type="text/javascript" src="../js/jquery-1.11.1.js"></script>
  6. <title>通过ajax为echarts更新数据</title>
  7. </head>
  8. <body>
  9. <!-- 第二步:为ECharts准备一个具备大小(宽高)的Dom -->
  10. <div id="main"
  11. style="height: 400px; width: 800px; border: 1px dotted black"></div>
  12. <span id="info"></span>
  13. <!-- 第一步:标签式单文件引入。引入之后可以直接使用echarts对象。 -->
  14. <script src="../js/echarts-plain-original.js"></script>
  15. <!-- 注意顺序,使用echarts对象要在引入echarts文件之后 -->
  16. <script type="text/javascript">
  17. $(document).ready(function() {
  18. // 初始化一个图表实例
  19. var myChart = echarts.init(document.getElementById('main'));
  20. // 使用jquery发送post请求,第四个参数指明如何解析服务端返回的数据。
  21. // 服务端返回的必须是标准格式的json,也就是双引号括起来的键值对
  22. $.post("../data", {
  23. name : "testdata"
  24. }, function(data) {
  25. option.title.text = data.title;
  26. option.xAxis[0].data = data.category;
  27. option.series[0].data = data.value;
  28. // 取得数据后显示到图表中
  29. myChart.setOption(option);
  30. myChart.on(echarts.config.EVENT.CLICK, eConsole);
  31. }, 'json');
  32. // echarts把复杂的图表结构化,图表的基本结构包括以下部分:标题,x轴,y轴,数值序列。
  33. var option = {
  34. // 标题
  35. title : {
  36. x : 'center',
  37. y : 'top',
  38. textStyle : {
  39. fontSize : 26,
  40. fontFamily : "微软雅黑",
  41. }
  42. },
  43. //
  44. grid : {
  45. borderWidth : 0
  46. },
  47. tooltip : {
  48. trigger : 'axis',
  49. axisPointer : {
  50. type : 'line',
  51. lineStyle : {
  52. color : '#0f0',
  53. width : 2,
  54. type : 'solid'
  55. }
  56. }
  57. },
  58. // x轴
  59. xAxis : [ {
  60. type : 'category',
  61. axisTick : {
  62. show : false
  63. },
  64. splitLine : {
  65. lineStyle : {
  66. type : 'dotted'
  67. }
  68. }
  69. } ],
  70. // y轴
  71. yAxis : [ {
  72. type : 'value',
  73. axisLabel : {
  74. formatter : '{value}件'
  75. },
  76. splitLine : {
  77. lineStyle : {
  78. type : 'dotted'
  79. }
  80. }
  81. } ],
  82. // 数值序列
  83. series : [ {
  84. name : '销量',
  85. type : 'line',
  86. itemStyle : {
  87. normal : {
  88. color : '#f00',
  89. lineStyle : {
  90. width : 2
  91. },
  92. label : {
  93. show : true,
  94. position : 'right',
  95. textStyle : {
  96. fontStyle : 'bolder',
  97. fontSize : 15
  98. }
  99. }
  100. }
  101. },
  102. symbol : 'emptyCircle',
  103. symbolSize : 4,
  104. } ]
  105. };
  106. // 事件的参数中包括:数据在序列中的下标dataIndex,数据的值value,x轴上的名称name
  107. function eConsole(param) {
  108. if (typeof param.seriesIndex == 'undefined') {
  109. return;
  110. }
  111. if (param.type == 'click') {
  112. var mes = param.name + ':' + param.value;
  113. document.getElementById('info').innerHTML = mes;
  114. }
  115. }
  116. });
  117. </script>
  118. </body>
  119. </html>

服务端的servlet如下,这种小东西还写的不熟练:获取文件路径,设置UTF-8编码,关闭流等操作还不够轻车熟路

[java] view plaincopy
  1. protected void doPost(HttpServletRequest request,
  2. HttpServletResponse response)
  3. throws ServletException, IOException
  4. {
  5. response.setCharacterEncoding("UTF-8");
  6. String name = request.getParameter("name");
  7. String fullPath = this.getServletContext().getRealPath("/") + "data"
  8. + File.separator + name;
  9. PrintWriter out = null;
  10. BufferedReader br = null;
  11. try
  12. {
  13. out = response.getWriter();
  14. br = new BufferedReader(new FileReader(fullPath));
  15. String str = null;
  16. while ((str = br.readLine()) != null)
  17. {
  18. out.print(str);
  19. }
  20. out.flush();
  21. }
  22. finally
  23. {
  24. if (br != null)
  25. {
  26. br.close();
  27. }
  28. // 即使自己不关闭,tomcat等容器也会关闭
  29. if (out != null)
  30. {
  31. out.close();
  32. }
  33. }
  34. }

服务端返回的数据一定要是标准格式的json。标准是指用双引号,不用单引号。另外,最后一个键值对后面不要有逗号,IE8中不允许JavaScript代码中的json采用这种不规范的写法,FireFox容许。

[javascript] view plaincopy
  1. {
  2. "title" : "销量和进货量",
  3. "category" : [ "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子" ],
  4. "value" : [ 5, 20, 40, 10, 10, 20 ]
  5. }

如果在图表已经加载过数据之后,想要换一组数据,可以用getOption方法得到一份option的深拷贝,然后把其中的数据改掉,再调用setOption方法就可以:

[html] view plaincopy
  1. var newOption = myChart.getOption(); // 深拷贝
  2. newOption.xAxis[0].data = newData.category;
  3. newOption.series[0].data = newData.value;
  4. myChart.setOption(newOption,true); // 第二个参数表示不和原先的option合并

使用echarts画图表相关推荐

  1. uni-app 使用web的echarts画图表

    uni-app 使用web的echarts画图表 initEcharts: function() {let data = {xAxis: [0, 1, 2, 3, 4, 5],data: [25, 3 ...

  2. vue 用echarts画图表

    创建vue项目 打开cmd 输入: cd到项目目录 安装element ui 和 echarts 在项目中引入element ui 和 echarts 在chart/src/main.js文件中 输入 ...

  3. python饼状图颜色一样_使用echarts画饼状图,设置饼状图颜色

    前言: 前面已经跟大家分享了使用echarts画柱状图.折线图,一些之前自己遇到的坑也跟大家说了,这次就不再赘述.官方有配置文档,很详细,大家不懂的地方也可以交流. 今日分享重点:画饼状图. 1.引入 ...

  4. vue使用Echarts画柱状图

    目录 1 引入Echarts 1.1 安装 1.2 引入 2 基本柱状图 3 多列柱状图 4 柱状图样式设置 4.1 柱条样式 4.2 柱条间距 5 动态排序柱状图 6 总结 1 引入Echarts ...

  5. Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图

    一.生成项目及安装插件 # 安装 Vue Cli npm install vue-cli -g# 初始化项目 vue init webpack vue-china-map# 切到目录下 cd vue- ...

  6. 在vue中使用echarts,echarts-map:echarts画地图

    1.首先安装:cnpm install echarts --save 2.然后main.js引入(也可以组件内引入) // 引入ECharts图表公共组件 import echarts from 'e ...

  7. Chart.js与ECharts.js图表组件对比与使用

    Chart.js与ECharts.js图表组件对比与使用 常用的 图表组件 Chart.js与ECharts.js的简要介绍与使用. Chart.js Chart.js官方网址.里面包括文档.例子和G ...

  8. echarts使用总结(使用echarts画工字型标记线;无数据时设置纵坐标刻度0-1;tooltip数据展示;工具栏 toolBox 图标配置)

    1. 使用echarts画标记线(工字型) 1.1 实现效果 1.2 使用属性 详细参数可查看echarts官网,markline属性 https://echarts.apache.org/zh/op ...

  9. echarts如何显示多个柱形图_使用echarts画多维柱状图

    前言 在此之前,已经跟大家分享了如何使用echarts画折线图.双折线图.柱状图,今天跟大家分享一下使用echarts画多维柱状图. 使用echarts遇到过的坑: 一定要给图表容器添加宽度与高度. ...

最新文章

  1. 【Visual C++】一些开发心得与调试技巧
  2. 为什么8位有符号数的取值范围是-128~+127
  3. weblogic中ssrf漏洞修复_Weblogic-SSRF漏洞复现
  4. 特征工程系列学习(零)引言
  5. django 1.8 官方文档翻译:9-2 本地特色附加功能
  6. 浏览器卡死 (但是内存还不到一半)
  7. Go语言之进阶篇请求报文格式分析
  8. 远程执行命令不成功的问题
  9. nginx处理域名后面多一个点
  10. 宋红康Java基础笔记
  11. 微信小程序登录界面的实现
  12. 浏览器工作原理和实践
  13. Echarts 三维地图
  14. 流传千古的爱情传说原来竟是一个先劫色后劫财的骗局
  15. zz 超级拖拉机 4.02 破解算法分析
  16. 科大讯飞批量语音转文字
  17. 浏览器无法上网解决方案
  18. 函数部分编程大作业(持续更新)
  19. 电脑通过热点共享网络,手机连接热点可以访问其他内网
  20. 阳历转化为农历的c语言程序,公历和农历之间如何转换?

热门文章

  1. Simple Black-box Adversarial Attacks
  2. access下半年月份是几月份_Access获取某年某月后的日期
  3. 请教python转Matlab的方法
  4. 学计算机用16g内存,电脑内存8G和16G有什么区别?电脑内存8G和16G的区别详解
  5. 软件构造Lab1——实验报告
  6. 山川湖海 - Android无障碍代理的那些事
  7. 小白学习应用构建分享-参照用法
  8. 小米 红米NOTE5 线刷兼救砖_解账户锁_纯净刷机包_教程
  9. 关于团队经营的若干体会
  10. greg名字寓意_我对我们的IT经理Greg进行了加粗标记。 dasBlog再次停滞不前。