前几天为了画一张图,使用了开源类库LiveCharts做了一个WPF的小程序,效果还算不错,但是也发现LiveCharts的功能还并不是很丰富,比如没法直接将图表另存为图片,总是用截屏就比较Low了,所以想到了Echarts。


解决思路

Echarts是一款功能比较丰富的js图表库,也有完善的文档资料。基于javascript和html开发的话对环境的要求也不高,难度也低于C#这样的语言。对于没有什么编程基础的人来讲也比较好接受,自己按照文档修改一些功能代码页比较简单。
从官网上的示例来看,制作包括散点图在内的图表的核心是一个标准的JSON数据结构,只要按照官方文档的说明搭建合适的JSON结构,几乎可以实现任何想要的效果,当然前提是Echarts能实现的效果。
基于以上原因要做一个Ehcarts的图表页面,不过有一个问题是需要从外部文件如Excel文件读取数据,个人感觉使用js解析Excel效率比较低,能否将之前WPF解析Excel数据的方案利用起来呢?而且Echarts的核心就是一个JSON结构,能否将从Excel解析出来的数据直接输出成符合Echarts的数据结构呢?答案是肯定的,确认方案如下:

WPF解析Excel
WPF输出JSON文件
JavaScript读取JSON文件
Echarts呈现图表

实现过程

WPF解析Excel

这一步在上篇文章已经讲过,使用的是Aspose.Cells类库来解析Excel,过程不再细说。
WPF随笔(八)–使用LiveCharts创建散点图

WPF输出JSON文件

由于Echarts里图表的数据源格式基本都为数组,散点图则是二维数组,所以优先将LiveCharts里的ScatterSeries类转换为二维数组。

        private double[,] ConvertSeriesToArray(ScatterSeries series){int count = series.Values.Count;double[,] datas = new double[count, 2];for (int i = 0; i < count; i++){datas[i, 0] = ((ScatterPoint)series.Values[i]).X;datas[i, 1] = ((ScatterPoint)series.Values[i]).Y;}return datas;}

之后将二维数组序列化后输出到文件。

        private void WriteToJsonFile(object datas, string filePath){string json = Newtonsoft.Json.JsonConvert.SerializeObject(datas);//string basePath = AppDomain.CurrentDomain.BaseDirectory;//string fileName = "data.json";//string filePath = basePath + "\\" + fileName;FileStream fs;StreamWriter sw;if (File.Exists(filePath))//验证文件是否存在,有则覆盖,无则创建{fs = new FileStream(filePath, FileMode.Truncate, FileAccess.Write);}else{fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);}sw = new StreamWriter(fs);sw.WriteLine(json);sw.Close();fs.Close();}

其中文件路径可以选择指定的文件来输出。

        #region 输出为JSON文件private void btnJson_Click(object sender, RoutedEventArgs e){System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog();dialog.Filter = "JSON(*.json)|*.json";System.Windows.Forms.DialogResult result = dialog.ShowDialog();if (result == System.Windows.Forms.DialogResult.OK){try{string fileName = dialog.FileName;//获取文件路径Double[,] data = ConvertSeriesToArray(ScatterSeries);//转换为二维数组WriteToJsonFile(data, fileName);//输出JSON文件}catch (Exception ex){MessageBox.Show(ex.Message);}}}#endregion

JavaScript读取JSON文件

JS读取JSON文件可以使用jQuery的Ajax或者getJson方法。

             $.getJSON("data.json",function(result){console.log(result);})

Echarts呈现图表

页面完整代码如下:

<!DOCTYPE html>
<html style="height: 100%"><head><meta charset="utf-8"></head><body style="height: 100%; margin: 0"><div id="container" style="height: 100%"></div><script type="text/javascript" src="Scripts/echarts.min.js"></script><!--引入shine主题--><script type="text/javascript" src="Scripts/shine.js"></script><script type="text/javascript" src="Scripts/jquery.min.js"></script><script type="text/javascript">var dom = document.getElementById("container");var myChart = echarts.init(dom,'shine');//第二个参数指定引入的主题var app = {};$(function(){$.getJSON("data.json",function(result){var option = {title: {text: '主标题',subtext: '副标题'},toolbox: {show: true,feature: {dataZoom: {yAxisIndex: 'none'},saveAsImage: {}}},color:['#2f4554', '#61a0a8', '#d48265'],tooltip: {trigger: 'item',axisPointer: {type: 'cross'}},xAxis: {scale: true,name:'X轴名称',nameLocation:'end'},yAxis: {scale: true,name:'Y轴名称',nameLocation:'end'},series: [{type: 'scatter',data: result,markLine:{data:[{name:'1.3',yAxis:1.3}]}}]};if (option && typeof option === "object") {myChart.setOption(option, true);}})})</script></body>
</html>

最后来张完成的效果图:


没有什么高深的东西,但有趣的是过程。

使用Echarts制作散点图相关推荐

  1. 使用Echarts制作散点图(Excel导入数据方式)

    2019独角兽企业重金招聘Python工程师标准>>> Echarts相当于一款JS插件,可以制作出绚丽多彩的图表,其支持制作的图表类型和可以使用的样式都非常丰富.本文以Echart ...

  2. 在jsp中使用ECharts制作图表

    ECharts插件的下载地址http://echarts.baidu.com/download.html 先来看看我们要达到的效果!后面直接上代码,如下图: 下面直接贴上代码 我们这里写的都是些死的数 ...

  3. 使用Echarts制作动态嵌套饼图

    笔者最近因为使用Echarts制作报表,参考了官方文档及某些博客,使用过程中有些想法,想将其中的一些记录下来,也希望能帮助到需要的人. 本例以嵌套的饼图为例.嵌套的饼图即为双层饼图,相比普通的饼图多了 ...

  4. echarts嵌套饼图自动动画_使用百度echarts制作可视化大屏——制作一个双层饼图...

    使用百度echarts制作可视化大屏--制作一个双层饼图 发布时间:2018-06-12 16:24, 浏览次数:745 , 标签: echarts 实现一个两层嵌套的环形图,展示三个分类下各个品牌车 ...

  5. 数据可视化:利用Python和Echarts制作“用户消费行为分析”可视化大屏

    数据可视化:利用Python和Echarts制作"用户消费行为分析"可视化大屏 前言 实验目的: 准备工作: 一.创建项目: 二.建立数据库连接获取数据: 三.页面布局: 四.下载 ...

  6. html5基于Echarts制作3D炫酷世界地图地球制作,地图勾起动画,非常炫酷。

    ❉ html5基于echarts.js制作3D炫酷世界地图地球仪动画 `html5基于echarts.js制作3D炫酷世界地图地球仪动画,业务迁移热点显示动画,地图勾起动画,非常炫酷.ps:涉及跨域, ...

  7. 利用Echarts制作地图(一)

    Echarts作为一个前端可视化工具,支持地图图表的展示.从本篇开始,将用三篇文章说明如何利用echats制作自定义区域的单图例.多图例及动态加载地图所需数据. Echarts支持 js 格式 与 g ...

  8. Echarts画散点图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Echarts画散点图 前言 一.散点图悬浮框鼠标移入可滚动操作 二.散点图偏下方的点悬浮数据显示不全 三.数据量大.数据类别多.数据 ...

  9. Echarts制作态势图、热点图、轨迹图,使用百度底图,地图下钻

    记录最近使用echarts制作地图的过程及部分代码: 其中在网络上借鉴了不少优秀的源码,在此感谢他们的开源精神. 先看效果: (一)态势图.热点图.轨迹图及全屏功能 全屏效果: (二)改普通地图为百度 ...

  10. echarts动态散点图+正弦图背景

    echarts动态散点图+正弦图背景: 动态效果视频:动态效果视频链接 代码: // 正弦波背景 function func (x) {x /= 57.2;return Math.sin(x) * 4 ...

最新文章

  1. C++ 对象的声明与引用
  2. Attach Volume 操作(Part I) - 每天5分钟玩转 OpenStack(53)
  3. 单选框_vue实现单选框自定义样式
  4. python scikit learn 封装_python的scikit-learn的主要模块和基本使用
  5. ​我们的系统需要什么样的分布式锁?
  6. Angular 应用的DevDependencies
  7. Spring ClassPathXmlApplicationContext
  8. [零基础学JAVA]Java SE应用部分-34.Java常用API类库
  9. 前端之使用 POST 提交数据并跳转
  10. python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
  11. 使用Docker支持创建ASP.NET Core应用程序
  12. 计算机信息系统安全保卫工作,对计算机信息系统安全保护工作的检查
  13. AcWing基础算法课Level-2 第五讲 动态规划
  14. MatConvNet 相关函数解释说明
  15. window和Linux下安装JDK配置环境变量
  16. 乌龟GIT的合并代码
  17. 动态交叉表(永洪bi)
  18. linux服务器运维工程师怎么样,怎样才算合格的运维工程师?linux运维技术
  19. EPUB电子书阅读必备
  20. 雨棚板弹性法计算简图_雨棚板的计算书

热门文章

  1. 谷歌:但使龙城飞将在 不教算法度阴山
  2. 修改服务器bi,修改 FineBI 配置参数
  3. 笔记:centos7的目录挂载,重要目录,/etc目录下重要文件
  4. 米家接入HomeKit系列五:Sir控制米家设备
  5. Python保龄球计分Demo
  6. 时序逻辑电路的设计(一) -- 模10的计数器电路(附Multisim)
  7. 第三部分:成交动力学之十大成交激素——9、紧迫感
  8. 无线网DNS服务器有错误,关于dns错误的原因和解决办法
  9. 别人家的阿里巴巴校招
  10. 传奇攻城期间禁止玩家下地图打怪的脚本写法