如何利用echarts图表获取点击图形类型点击类型
第一步,新建静态页面barhtml,修改title并引入echarts js文件,如下图所示:
第二步,添加条状图容器,在<body></body>插入一个div,并给出id属性和宽度高度,如下图所示:
第三步,编写生成条状图的js代码,添加数据和样式,如下图所示:
第四步,预览该图形界面,可以看到效果图,如下图所示:
第五步,编写点击条状图的柱子,然后获取它们的name和value,如下图所示:
第六步,再次预览该界面,打开浏览器的控制台,查看打印结果,如下图所示:
ECharts可以很方便的在网页上绘制地图,图表,并且可以提供下载图像,放大,缩小,拖动等功能,今天主要说一下它的地图类型(type:'map')是如何实现的.
首先在ECharts地图的坐标需要我们存储在一个geoCoord属性里,它是一个JS的字典对象,由键/值对组成,键表示点的名称,值则表达它的坐标,由经纬度组成,它是一个数组,如[13600,3200]它就表示了一个坐标.
地图类型的图表需要关注的元素
title:标题,显示这个地图所表示的名称
title: {
text: '清大云点亮中国',
subtext: 'TsingdaCloud',
sublink: 'http://wwweee114com',
x: 'center',
y: 'top',
textStyle: {
color: '#fff'
}
}
toolbox:工具栏,显示一些显示的工具,放大,缩小,查看数据集,下载图像等
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
restore: { show: true },
saveAsImage: { show: true }
}
}
legend:图标显示,当series有多个地图时,这个值用到显示多个地图的图标,可以是横向显示和纵向显示
legend: {
x: 'left',
y: 'top',
data: ['在线', '离线'],//在线和离线对应的是series的名字
selectedMode: false,//选中悬浮
textStyle: {
color: '#fff'
}
}
series:地图显示,用来叠放显示地图,你可以定义多个,它们之间的关系是第一个在最上面,以此类推.
series: [
//默认
{
name: '底层模版',
type: 'map',
mapType: 'china',
data: provinceMap,
geoCoord: source,
itemStyle: {
normal: {
color: bgColor,
borderColor: "#eee",
label: {
show: true,
textStyle: {
color: "#fff"
}
}
}, emphasis: { color: "rgba(128, 128, 128, 05)" }
},
}]
markPoint:点标识,用来标识地图上的后,这些点通常是被存储在一个geoCoord对象上,这个对象是一个字典,这在文章开头已经介绍过.
markPoint: {//动态标记
large: true,//这个选项,悬浮自动失效
symbolSize: 2,
itemStyle: {
normal: {
shadowBlur: 2,
shadowColor: 'rgba(37, 140, 249, 08)',
color: onColor
}
},
data: []
}
markPoint里的data对象是这个地图上需要显示的点,它是一个字符型数组,用来存储geoCoord里的键!
setOption:将地图对象添加到指定的地图对象上
var myChart = echartsinit(documentgetElementById('main'));
var option={};
myChartsetOption(option);
动态构建地图上的点标识markPoint
大概的思路是将要标记的点动态付给geoCoord和markPoint的data对象上,这样就可以动态在地图上标示点了
$get("/map/GetOffMap", function (data) {
for (var i in data) {
optionseries[0]geoCoord[data[i]longitude + "_" + data[i]latitude] = [parseFloat(data[i]longitude), parseFloat(data[i]latitude)];
optionseries[1]markPointdatapush({ name: data[i]longitude + "_" + data[i]latitude });
}
myChartsetOption(option);
echarts是做数据统计。
1、 Echarts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11),Chrome,Firefox,Safari等。
2、底层依赖轻量级Canva+库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。
3、ECharts 3 中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化。
扩展资料
echarts的优点:
1、国人开发,文档全,便于开发和阅读文档。
2、图表丰富,可以适用各种各样的功能。
echarts的缺点:
1、移动端使用略卡,毕竟是PC端的东西,移植到移动端肯定多多少少有些问题吧,或许跟自己水平也有一定的关系。
2、echarts不失为一款比较适合我们这种码农使用的框架。
3、echarts就不贴代码了。毕竟文档很全。
参考资料:
1、主标题与副标题无法放置不同的位置
根据官方文档设置titlealign为left或者titlesubtextStylealign为left均无效
方法一:加一个div使用绝对定位存放副标题
方法二:使用伪元素绝对定位存放副标题
2、饼图的series列表下的label即在外部显示又在内部显示
方法一:设置两个div存放两个数据一样的饼图,第一个div渲染饼图的series[0]label设置为"{formatter: '{d}%'}",第二个div渲染饼图的series[0]label设置为"{formatter: '{c}个', position: 'inner', color: 'white'}",注意第二个div覆盖显示在第一div的上面。
方法二:div渲染饼图的series[0]label设置为"{formatter: '{d}%'}", series[1]label设置为"{formatter: '{c}个', position: 'inner', color: 'white'}",同时series[0]的其它数据和series[1]的其它数据一致,series[0]label的内容可以和series[0]互换。
3、series存在多个,默认情况下legend的样式按series[0]为准
series[0]没有设置样式,series[1]itemStylenormal自定义样式,最终效果如上图
4、y轴文字左对齐
柱体设置弧度可以通过设置series[0]itemStylenormalbarBorderRadius为[0, 5, 5, 0],数字代表弧度,数组顺序代表柱体顺时针左上,右上,右下,左下
文字左对齐可以设置yAxisaxisLabeltextStylealign为left,此时的y轴的文字将出现在柱体里
yAxisaxisLabeltextStylemargin可以用来设置yAxis和grid的间隔
可以看到柱状图没有填满整个div,可以设置gridleft的值为负值来填满div
// 指定图表的配置项和数据varoption = {
backgroundColor: 'rgba(204,204,204,07 )',
// 背景色,默认无背景 rgba(51,255,255,07) title: {
text: '各教育阶段男女人数统计',
link: 'https://wwwxxxcom',
target: 'blank',
top: '5%',
left: '3%',
textStyle: {
color: '#fff',
fontSize: 20,
}
},
legend: { // 图例组件show:true,
icon: 'rect',
// 图例项的 icon。ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'也可以通过 'image://url' 设置为,其中 url 为的链接,或者 dataURI。可以通过 'path://' 将图标设置为任意的矢量路径。 top: '40%',
// 图例距离顶部边距left: '15%',
// 图例距离左侧边距itemWidth: 10,
// 图例标记的图形宽度。[ default: 25 ]itemHeight: 10,
// 图例标记的图形高度。[ default: 14 ]itemGap: 30,
// 图例每项之间的间隔。[ default: 10 ]横向布局时为水平间隔,纵向布局时为纵向间隔。orient: 'vertical',
// 图例列表的布局朝向,'horizontal'为横向,''为纵向textStyle: {// 图例的公用文本样式。fontSize: 15,
color: '#fff' },
data: [{ // 图例的数据数组。数组项通常为一个字符串,每一项代表一个系列的 name(如果是饼图,也可以是饼图单个数据的 name)。图例组件会自动根据对应系列的图形标记(symbol)来绘制自己的颜色和标记,特殊字符串 ''(空字符串)或者 '\n'(换行字符串)用于图例的换行。name: '男',
// 图例项的名称,应等于某系列的name值(如果是饼图,也可以是饼图单个数据的 name)。 icon: 'rect',
// 图例项的 icon。textStyle: {// 图例项的文本样式。color: 'rgba(51,0,255,1)',
fontWeight: 'bold'// 文字字体的粗细,可选'normal','bold','bolder','lighter' }
},
{
icon: 'rect',
textStyle: {
color: 'rgba(255,0,0,1)',
fontWeight: 'bold'// 文字字体的粗细,可选'normal','bold','bolder','lighter' }
}],
},
radar: [{ // 雷达图坐标系组件,只适用于雷达图。center: ['50%', '50%'],
// 圆中心坐标,数组的第一项是横坐标,第二项是纵坐标。[ default: ['50%', '50%'] ]radius: 160,
// 圆的半径,数组的第一项是内半径,第二项是外半径。startAngle: 90,
// 坐标系起始角度,也就是第一个指示器轴的角度。[ default: 90 ]name: {// (圆外的标签)雷达图每个指示器名称的配置项。formatter: '{value}',
textStyle: {
fontSize: 15,
color: '#000' }
},
nameGap: 15,
// 指示器名称和指示器轴的距离。[ default: 15 ]splitNumber: 4,
// (这里是圆的环数)指示器轴的分割段数。[ default: 5 ]shape: 'circle',
// 雷达图绘制类型,支持 'polygon'(多边形) 和 'circle'(圆)。[ default: 'polygon' ]axisLine: {// (圆内的几条直线)坐标轴轴线相关设置 lineStyle: {
color: '#fff',
// 坐标轴线线的颜色。width: 1,
// 坐标轴线线宽。type: 'solid',
// 坐标轴线线的类型。 }
},
splitLine: { // (这里是指所有圆环)坐标轴在 grid 区域中的分隔线。 lineStyle: {
color: '#fff',
// 分隔线颜色width: 2,
// 分隔线线宽 }
},
splitArea: { // 坐标轴在 grid 区域中的分隔区域,默认不显示。show:true,
areaStyle: { // 分隔区域的样式设置。color: ['rgba(250,250,250,03)', 'rgba(200,200,200,03)'],
// 分隔区域颜色。分隔区域会按数组中颜色的顺序依次循环设置颜色。默认是一个深浅的间隔色。 }
},
indicator: [{ // 雷达图的指示器,用来指定雷达图中的多个变量(维度),跟data中 value 对应name: '高中',
// 指示器名称 max: 15000,
// 指示器的最大值,可选,建议设置 //color: '#fff' // 标签特定的颜色。 },series: [{
name: '雷达图',
// 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。type: 'radar',
// 系列类型: 雷达图itemStyle: {// 折线拐点标志的样式。normal: {// 普通状态时的样式 lineStyle: {
width: 1 },
opacity: 02 },
emphasis: { // 高亮时的样式 lineStyle: {
width: 5 },
opacity: 1 }
},
data: [{ // 雷达图的数据是多变量(维度)的name: '女',
// 数据项名称value: [11035, 6013, 5067, 1520, 184],
// 其中的value项数组是具体的数据,每个值跟 radarindicator 一一对应。symbol: 'circle',
// 单个数据标记的图形。symbolSize: 5,
// 单个数据标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,例如 [20, 10] 表示标记宽为20,高为10。label: {// 单个拐点文本的样式设置 normal: {
show: true,
// 单个拐点文本的样式设置。[ default: false ]position: 'top',
// 标签的位置。[ default: top ]distance: 5,
// 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。[ default: 5 ]color: 'rgba(255,0,0,1)',
// 文字的颜色。如果设置为 'auto',则为视觉映射得到的颜色,如系列色。[ default: "#fff" ]fontSize: 14,
// 文字的字体大小formatter:function(params) {
return paramsvalue;
}
}
},
itemStyle: { // 单个拐点标志的样式设置。 normal: {
borderColor: 'rgba(255,0,0,1)',
// 拐点的描边颜色。[ default: '#000' ]borderWidth: 3,
// 拐点的描边宽度,默认不描边。[ default: 0 ] }
},
lineStyle: { // 单项线条样式。 normal: {
opacity: 05// 图形透明度 }
},
areaStyle: { // 单项区域填充样式 normal: {
color: 'rgba(255,0,0,06)'// 填充的颜色。[ default: "#000" ] }
}
},
1安装echarts
npm install echarts -S
2在mainjs中引用echarts
import echarts from 'echarts'
Vueprototype$echarts = echarts
3封装chart组件(复制粘贴就好了)
<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="bar" style="width: 600px;height:400px;"></div>
<div id="pie" style="width: 600px;height:400px;"></div>
<div id="line" style="width: 600px;height:400px;"></div>
在script里面写下面内容
export default{
mounted(){
thisdrawLine();//调用这个方法
},
methods:{
drawLine () {
var echarts = require('echarts');
var barChart = echartsinit(documentgetElementById('bar'));
var pieChart = echartsinit(documentgetElementById('pie'));
var lineChart = echartsinit(documentgetElementById('line'));
barChartsetOption({
title: {
text: '柱状图'
},
tooltip: {},
legend: {
data: ['销量']
},
xAxis: {
data: ["肉夹馍", "馒头", "豆沙包", "粉丝汤", "豆包", "油条"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
});
pieChartsetOption({
title: {
text: '饼图'
},
series: [{
name: '访问来源',
type: 'pie', // 设置图表类型为饼图
radius: '55%', // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。
data: [ // 数据数组,name 为数据项名称,value 为数据项值
{
value: 235,
name: '视频广告'
},
{
value: 274,
name: '联盟广告'
},
{
value: 310,
name: '邮件营销'
},
{
value: 335,
name: '直接访问'
},
{
value: 400,
name: '搜索引擎'
}
]
}]
});
lineChartsetOption({
title: {
text: '折线图',
},
tooltip: {},
legend: {
data: ['销量', '试穿', '退货'],
x: 'right'
},
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'line',
data: [5, 20, 36, 10, 10, 20]
}, {
name: '试穿',
type: 'line',
data: [30, 40, 50, 20, 12, 30]
}, {
name: '退货',
type: 'line',
data: [1, 2, 1, 3, 5, 2]
}]
});
}
}
}
中红色框起来的按钮
2、代码
[javascript] view plain copy
selfButtons:{//自定义按钮 danielinbiti,这里增加,selfbuttons可以随便取名字
show:true,//是否显示
title:'自定义', //鼠标移动上去显示的文字
icon:'testpng', //图标
option:{},
onclick:function(option1) {//点击事件,这里的option1是chart的option信息
alert('1');//这里可以加入自己的处理代码,切换不同的图形
}
}
在toolbox中的位置
[javascript] view plain copy
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
selfButtons:{//自定义按钮 danielinbiti,这里增加,selfbuttons可以随便取名字
show:true,//是否显示
title:'自定义', //鼠标移动上去显示的文字
icon:'testpng', //图标
option:{},
onclick:function(option1) {//点击事件,这里的option1是chart的option信息
alert('1');//这里可以加入自己的处理代码,切换不同的图形
}
},
saveAsImage : {show: true}
}
}
当然,内置了很多图标,这些图标都是画出来的。
[javascript] view plain copy
iconLibrary: {
mark: _iconMark,
markUndo: _iconMarkUndo,
markClear: _iconMarkClear,
dataZoom: _iconDataZoom,
dataZoomReset: _iconDataZoomReset,
restore: _iconRestore,
lineChart: _iconLineChart,
barChart: _iconBarChart,
pieChart: _iconPieChart,
funnelChart: _iconFunnelChart,
forceChart: _iconForceChart,
chordChart: _iconChordChart,
stackChart: _iconStackChart,
tiledChart: _iconTiledChart,
dataView: _iconDataView,
saveAsImage: _iconSave,
cross: _iconCross,
circle: _iconCircle,
rectangle: _iconRectangle,
triangle: _iconTriangle,
diamond: _iconDiamond,
arrow: _iconArrow,
star: _iconStar,
heart: _iconHeart,
droplet: _iconDroplet,
pin: _iconPin,
image: _iconImage
}
带chart后缀的都放在magicType的type中,同时后缀chart不用,程序里会自动拼接,比如lineChart,写'line'
一、后台返回一个集合Map<String,List<Map<String,Object>>> ,每个map对应一个图。
二、jsp 页面
1、首先引入 jquery 和echarts 的 js文件
2、创建 展示环形图的div
<div id="five"></div>
3、echarts加载,用ajax访问后台获取数据
总结:
一个页面要显示多个图表(不同的)时,添加多个div,然后给每个div加载echarts图表,配置option;
一个页面要显示多个图表(相同的)时,如上,把series设置为数组,然后一个一个的添加即可。
如何利用echarts图表获取点击图形类型点击类型
本文2023-10-04 14:57:16发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/173737.html