ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

时间:2022-09-07 11:39:54

导读

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

本篇探讨的是ECharts关系图中节点显示为自定义图像,对应所用技术点:Asp.Net MVC & Razor 视图引擎。

一、关系图节点显示为自定义图像效果图

ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

关系图节点显示为自定义图像效果图

二、MVC后台数据获取

1.带分类的数据列表获取Action 核心代码

 public JsonpResult GetScholarRelation(string id)
{
//参数校验 略
var list = new List<ScholarDto>();//学者集合列表
var groups = new List<ScholarDto>();//学者研究主题集合列表
try
{
IScholarService scholarService = new ScholarService();//获取数据接口
var group = scholarService.GetScholarRelation(new ScholarDto() { BookId = id }).GroupBy(c => c.GroupId);//IEnumerable<IGrouping<long?, ScholarDto>>
int groupCode = ;
foreach (var item in group)
{
var subList = item.ToList();//子分组集合
foreach (var subItem in subList)
{
subItem.GroupCode = groupCode;//遍历子分组,研究主题序号重新编码 从1开始
} list.AddRange(subList);
groups.Add(new ScholarDto() { GroupCode = subList.FirstOrDefault().GroupCode, GroupName = subList.FirstOrDefault().GroupName, GroupId = item.Key ?? });//item.Key为GroupId
groupCode++;
}
return this.Jsonp(new { Success = , Msg = "查询成功", List = list, Group = groups });
}
catch (Exception ex)
{
return this.Jsonp(new { Success = , Msg = "查询失败:" + ex.Message });
}
}
  • MVC框架没有返回结果为JsonpResult的方法,有简单封装;
  • ScholarDto类中GroupCode为从1编码的分类索引,用以填充ECharts分类相关配置项;

2.数据传输对象ScholarDto

  public class ScholarDto : xk_scholar
{
/// <summary>
/// 研究主题名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// 重新编码排序的研究主题编号,从1开始,用以使用插件echarts
/// </summary>
public int GroupCode { get; set; }
}

三、前台Razor视图内html及js

1.ECharts容器

//页面引用jquery及4.x版本的ECharts
//<script src="~/js/echarts/src/echarts.min.js"></script>
//为 ECharts 准备一个具备高宽的 DOM 容器。
<div class="scholar">
<div id="relationChart" style="width: 600px; height: 400px;"> </div>
</div>

2.ECharts配置项及初始化

    var author = "@Author";
var nodes = [{
category: 0,
name: author,
symbol: "circle",//"image://http://thumb12.jfcdns.com/2018-06/bce5b231ad7df722.png",
symbolSize: 100,
size: 100,
label: author + "\n(作者)",
x: null,
y: null,
draggable: true
}] var links = [];//关系线条
var legendData = [];//分类按钮,中心节点去掉分类搜索
var seriesCategories = ["作者"];//关系图只有二级,中心节点独占一个分类,分类索引为0 //// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('relationChart'));
option = {
title: {//标题组件,包含主标题和副标题。
text: '相关学者:@Author',
subtext: '',
x: 'right',
y: 'bottom'
},
tooltip: {//提示框组件
trigger: 'item',
formatter: '{a} : {b}'
},
toolbox: {//工具栏。内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。
show: true,
feature: {
restore: { show: true },//重置
magicType: { show: true, type: ['force', 'chord'] },
saveAsImage: { show: true }//导出图片
}
},
legend: {//图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
x: 'left',
data: legendData//['作者', '家人', '朋友']
},
//edgeLength: [500, 100],
series: [//系列列表。每个系列通过 type 决定自己的图表类型。series[i]-graph用于展现节点以及节点之间的关系数据。
{
type: 'graph',
name: "相关学者",
layout: 'force',
//symbol: 'pin',
ribbonType: false,
categories: seriesCategories,//分类数据
itemStyle: {
normal: {
label: {
show: true,
textStyle: {
color: '#333'
},
position: 'bottom',//标签位置
distance: 5//标签距离图形的距离
},
nodeStyle: {
brushType: 'both',
borderColor: 'rgba(255,215,0,0.4)',
borderWidth: 1
},
linkStyle: {
type: 'line'
}
},
emphasis: {//高亮的图形样式
label: {
show: false
// textStyle: null // 默认使用全局文本样式,详见TEXTSTYLE
},
nodeStyle: {
//r: 30
},
linkStyle: {}
}
},
//useWorker: false,
minRadius: 15,
maxRadius: 25,
//gravity: 0.1,//节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
//scaling: 0.1,
//roam: 'move',
nodes: nodes,//同data,关系图的节点数据列表。
links: links,//节点间的关系数据。
force: {
repulsion: 1000//节点之间的斥力因子。
}
}]
};

3.ECharts动态填充配置项数据

$(function () {
getRelation("@bookId");//@bookId为Razor视图引擎语法
})
function getRelation(id) {
//使用了Layer插件
$.ajax({
url: "..../GetScholarRelation",
type: "post",
dataType: "jsonp",
async: false,
data: { "Id": id },
jsonp: "callback",
beforeSend: function () {
loadingLayer = layer.load(1, {
shade: [0.6, '#fff']
});
},
success: function (data) {
var result = data;
if (result.Success == 1) {
//节点
$.each(result.List, function (i, e) { nodes.push({
category: e.GroupCode,
name: e.RealName,
symbol: "image://e.Avatar",//e.Avatar为图片链接
symbolSize: 60,
size: 60,
x: null,
y: null,
draggable: true,
scholarUrl:e.Link
}),
links.push(
{
source: e.RealName,
target: author,
weight: 6,
name: e.RealName,
})
}) $.each(result.Group, function (i, e) {
legendData.push(e.GroupName);
seriesCategories.push({
name: e.GroupName
}) })
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
else {
layer.msg(result.Msg);
}
}
});
}

symbol配置为: "image://url"即可使节点显示为图片。为了美观,将图片展示为圆形,此图片为png格式的半透明图片,暂未深入研究使用配置项将图片节点样式设置为圆形;

3.ECharts节点绑定点击事件

 //节点点击事件
myChart.on('click', function (param) {
//param是个强大的参数,里面有你想要的
if (param.data.scholarUrl) {//scholarUrl为自定义属性
window.open(param.data.scholarUrl);
}
});

四、值得注意的几个点

  • ECharts 2.x 中 force 类型的图表不再在 ECharts 3 中提供支持,转为统一使用 graph 去展现关系数据。如果要使用力引导布局,可以将 layout 配置项设为'force'
  • ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器。因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 script 标签引入。

  • 需要为 ECharts 准备一个具备高宽的 DOM 容器。
  • 5 分钟上手 ECharts

附其他参考资料

总结

本篇主要介绍了ECharts图表插件(4.x版本)关系图节点显示为自定义图片的方法,即将节点配置项symbol设置为"image://url",提到了节点绑定点击事件的方式,顺带介绍了MVC框架下数据交互及填充。lambda 语法获取及处理列表分组数据,GroupBy返回值类型为 IEnumerable<IGrouping<TKey, TSource>>。

ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)的更多相关文章

  1. Echarts图表插件&lpar;4&period;x版本&rpar;使用(二、带分类筛选的多个图表&sol;实例化多个ECharts,以关系图&sol;force为例)

    导读 如果想在一个页面里实例化带分类筛选的多个Echarts该怎么做呢? 曾探讨了带分类选择的关系图显示为自定义图片的需求实现,传送门ECharts图表插件(4.x版本)使用(一.关系图force节点 ...

  2. vue3&period;x版本安装element-ui、axios及echarts图表插件

    项目中安装使用element-UI 命令行: vue add element 安装成功后,项目会自动将element-UI引入项目中,刷新项目即可 项目中安装使用axios数据请求 vue add a ...

  3. 如何在网页中用echarts图表插件做出静态呈现效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 在内网中 vue项目添加ECharts图表插件

    原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...

  5. webpack -v显示的版本与package&period;json的devDependencies节点显示的webpack版本不一致的问题

    最近在学习webpack,遇到个奇葩的问题.就是安装完成webpack后,查看安装的webpack版本与package.json中显示的版本不一致, webpack是局部安装的,非全局安装, 命令1: ...

  6. SQL2008R2 不支持用该后端版本设计数据库关系图或表

    向下不兼容. 要么安装SQL2012,要么把SQL2012数据库通过脚本转成2008

  7. 图表插件--jqplot交互演示样例

    简单交互 在之前的学习中,我们已经能够绘制各种类型的图表,也能够给图表加入不同的组件,如标题.图例等等.但这些图表仅仅能用于展示数据,一旦希望对图表有所操作--比方查看数据明细--就显得束手无策了.事 ...

  8. vue table中使用多选的问题(翻页后如何保存已选项),联动echarts图表实现流量监控

    流量监控项目需求: 根据表格数据,添加多选功能,默认全选,根据已选项更新图表视图 1.表格需要多选 2.要联动图表,所以关键是要利用表格多选的触发回调函数 vue table中使用多选: 很简单,只需 ...

  9. 纯JavaScrip图表插件——Highcharts

    简介 Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.目前H ...

随机推荐

  1. 使用gulp&plus;browser-sync搭建前端项目自动化以及自动刷新

    前段时间使用了gulp+browser-sync才发现这个东西真的很好用. 准备工作:(1).安装nodejs.gulp是基于nodejs使用的,所以先安装nodejs,https://nodejs. ...

  2. iBATIS代码生成分析

    1.分析目录结构"tools"(或者说模板) 2.首先分析ibatorConfig.xml文件 <?xml version="1.0" encoding= ...

  3. &lbrack;leetcode&rsqb; 403&period; Frog Jump

    https://leetcode.com/contest/5/problems/frog-jump/ 这个题目,还是有套路的,之前做过一道题,好像是贪心性质,就是每次可以跳多远,最后问能不能跳到最右边 ...

  4. 保存项目文件&OpenCurlyDoubleQuote;XXX&period;csprj”时出错。类没有注册。

    [出错提示]保存项目文件“XXX”时出错.类没有注册.正在查找具有CLSID的对象:{D9B3211D-E57F-4426-AAEF-30A806ADD397}. [解决办法] 需要安装:MSXML_ ...

  5. codeforces 620F&period; Xors on Segments

    题目链接 定义一种操作f(u, v) = u^u+1^.......^v. (u<=v), 给n个数, q个询问, 每个询问给出一个区间[l, r], 求这个区间里的f(a[i], a[j]) ...

  6. Ruby读excel写入mysql

    安装mysql2 打开cmd: gem install mysql2 代码 require 'win32ole' require 'mysql2' class String def addslashe ...

  7. 利用angular打造管理系统页面

    1 创建一个新的angular应用 ng new adminSystem 2 利用WebStorm打开adminSystem应用 3 借助AdminLTE这个开源项目来辅助开发 AdminLTE项目: ...

  8. 简单用数组模拟顺序栈(c&plus;&plus;版)适合新手

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  9. Nagios学习实践系列

    其实上篇Nagios学习实践系列--基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...

  10. VC&plus;&plus;网络安全编程范例(11)-SSL高级加密网络通信&lpar;转&rpar;

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与 ...