echarts使用与踩坑
0.踩坑点
- 1.
当图表不显示在页面(display:none)执行resize可能会导致图表样式混乱
1. 官网示例
import * as echarts from 'echarts';
// 基于准备好的dom,初始化echarts实例
// 注意: 这里的main元素要有宽度才可以,不然页面上是看不到渲染的图标的,但实际上echarts已经初始化,
// 但是由于绘制挂载的元素没高度不可见 官网这里没有给出对应的main相关的代码 因此直接写一个<div id='main'></div> 是看不到渲染的元素的
var myChart = echarts.init(document.getElementById('main'));
// 绘制图表
myChart.setOption({
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
});
2. 使用到的一些api
// 窗口变化后 重新绘制图形,达到自适应目的
window.addEventListener('resize', function() {
// 此处可以使用debounce进行加载优化
myChart.resize();
});
// 组件销毁 销毁掉绘制图表
myChart.dispose();
3.使用到的属性
const option: EChartsOption = {
// 标题
title: {
// 是否显示标题
show: true,
// 标题文字
text: 'Echarts示例',
// 图表位置 可以为百分比 或者具体px值
top: '5%',
bottom: 10,
left: 'center',
right: 'left',
// 标题样式
textStyle: {
fontSize: 12,
color: '#929292',
},
// 副标题
subtext: '副标题'
,
// 副标题样式
subtextStyle: {}
},
// 提示框
tooltip: {
// 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
trigger: 'item',
// 背景色
backgroundColor: 'white',
// 边框
borderColor: '#3fb1e3',
// 文字样式
textStyle: { color: '#333' },
// 内容自定义
formatter: (params) => {
const { marker, name, value } = params;
// marker为对应颜色小圆点
return `${name}<br/>${marker}自定义显示内容:${value}`;
},
// 可以是字符串 代表{a} {b} 代表params中的参数
// formatter: '{c}',
},
// 图例组件 即 饼图下方的分类 可以点击进行分类的选取 应用到对应的图形上
legend: {
// 图例类型 普通
type: 'plain',
// 是否展示
show: true,
// 位置
bottom: '2%',
// 文字样式
textStyle: { fontSize: '12px', padding: 0, minMargin: 0 },
// 颜色块大小 => 图例标记的图形宽度
itemWidth: 15,
// 图例组件整体宽度
width: 180,
// 图例的图形样式
itemStyle: {
borderWidth: 0,
},
},
series: [
{
name: '示例1',
// 图标类型 pie 饼图 bar 柱状图
type: 'pie',
// 位置
bottom: 20,
left: 'center',
// 'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
// 'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
roseType: 'area',
// 饼图半径 内半径:[20] 完整的园(披萨) 外半径: ['20%', '40%'] (最中间挖空一块 类似操场 只有跑道)
radius: ['20%', '40%'],
// 饼图的中心坐标
center: ['center', 'center'],
// 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。 => 会溢出隐藏
avoidLabelOverlap: true,
// 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
label: {
show: true,
// 标签说明位置 不加带有折线 加了位置后折线会消失
// position: 'insideTop',
formatter: '{c}',
},
// 颜色 会均分 颜色例如 9条数据 3个颜色 每三个颜色为一组循环
color: ['#2ea6da', '#3fb1e3', '#b0f5ff'],
// 高亮区域配置
emphasis: {
// 是否开启悬浮高亮
disabled: false,
// 高亮区域样式
itemStyle: {
color: 'red'
},
// 高亮区域旁边的文字说明
label: {
show: true,
// formatter: '1122'
}
},
// 数据
data: [
{ value: 0, name: '分类1' },
{ value: 1, name: '分类2' },
{ value: 2, name: '分类3' },
{ value: 3, name: '分类4' },
{ value: 5, name: '分类5' },
{ value: 4, name: '分类6' },
{ value: 3, name: '分类7' },
{ value: 6, name: '分类8' },
{ value: 4, name: '分类9' },
],
},
],
};
4.按需加载


如果按需加载后渲染图表缺失,可能你使用到的组件没有按需加载进入
5.react示例注释代码,可直接复制运行
import React, { useEffect } from 'react'
import * as echarts from 'echarts/core';
import {
BarChart,
// 系列类型的定义后缀都为 SeriesOption
LineChart,
} from 'echarts/charts';
import {
TitleComponent,
// 组件类型的定义后缀都为 ComponentOption
TooltipComponent,
GridComponent,
// 数据集组件
DatasetComponent,
// 内置数据转换器组件 (filter, sort)
TransformComponent
} from 'echarts/components';
import { LabelLayout, UniversalTransition } from 'echarts/features';
import { CanvasRenderer } from 'echarts/renderers';
// 注册必须的组件
echarts.use([
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
BarChart,
LineChart,
LabelLayout,
UniversalTransition,
CanvasRenderer
]);
type EChartsOption = echarts.EChartsCoreOption;
export default function Echarts() {
useEffect(() => {
let chartDom = document.getElementById('echarts')!;
let myChart = echarts.init(chartDom);
const option: EChartsOption = {
// 标题
title: {
// 是否显示标题
show: true,
// 标题文字
text: 'Echarts示例',
// 图表位置 可以为百分比 或者具体px值
top: '5%',
bottom: 10,
left: 'center',
right: 'left',
// 标题样式
textStyle: {
fontSize: 12,
color: '#929292',
},
// 副标题
subtext: '副标题'
,
// 副标题样式
subtextStyle: {}
},
// 提示框
tooltip: {
// 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
trigger: 'item',
// 背景色
backgroundColor: 'white',
// 边框
borderColor: '#3fb1e3',
// 文字样式
textStyle: { color: '#333' },
// 内容自定义
formatter: (params) => {
const { marker, name, value } = params;
// marker为对应颜色小圆点
return `${name}<br/>${marker}自定义显示内容:${value}`;
},
// 可以是字符串 代表{a} {b} 代表params中的参数
// formatter: '{c}',
},
// 图例组件 即 饼图下方的分类 可以点击进行分类的选取 应用到对应的图形上
legend: {
// 图例类型 普通
type: 'plain',
// 是否展示
show: true,
// 位置
bottom: '2%',
// 文字样式
textStyle: { fontSize: '12px', padding: 0, minMargin: 0 },
// 颜色块大小 => 图例标记的图形宽度
itemWidth: 15,
// 图例组件整体宽度
width: 180,
// 图例的图形样式
itemStyle: {
borderWidth: 0,
},
},
series: [
{
name: '示例1',
// 图标类型 pie 饼图 bar 柱状图
type: 'pie',
// 位置
bottom: 20,
left: 'center',
// 'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
// 'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
roseType: 'area',
// 饼图半径 内半径:[20] 完整的园(披萨) 外半径: ['20%', '40%'] (最中间挖空一块 类似操场 只有跑道)
radius: ['20%', '40%'],
// 饼图的中心坐标
center: ['center', 'center'],
// 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。 => 会溢出隐藏
avoidLabelOverlap: true,
// 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
label: {
show: true,
// 标签说明位置 不加带有折线 加了位置后折线会消失
// position: 'insideTop',
formatter: '{c}',
},
// 颜色 会均分 颜色例如 9条数据 3个颜色 每三个颜色为一组循环
color: ['#2ea6da', '#3fb1e3', '#b0f5ff'],
// 高亮区域配置
emphasis: {
// 是否开启悬浮高亮
disabled: false,
// 高亮区域样式
itemStyle: {
color: 'red'
},
// 高亮区域旁边的文字说明
label: {
show: true,
// formatter: '1122'
}
},
// 数据
data: [
{ value: 0, name: '分类1' },
{ value: 1, name: '分类2' },
{ value: 2, name: '分类3' },
{ value: 3, name: '分类4' },
{ value: 5, name: '分类5' },
{ value: 4, name: '分类6' },
{ value: 3, name: '分类7' },
{ value: 6, name: '分类8' },
{ value: 4, name: '分类9' },
],
},
],
};
const chartResize = () => {
myChart.resize()
}
myChart.setOption(option);
window.addEventListener('resize', chartResize)
return () => {
myChart.dispose()
window.removeEventListener('resize', chartResize)
}
})
return (
<>
<div id='echarts' style={{ height: 300, width: '100%' }}>Echarts</div>
</>
)
}
echarts使用与踩坑的更多相关文章
- ant.design React使用Echarts,实力踩坑
最近项目用到Echarts(以下用ec代替),于是照猫画虎得引入到团队的antd项目中,但是遇到2个棘手问题: 1. ec对dom不渲染,检查后发现,原来是全局存在id重复,所以使用React时,最好 ...
- vue父组件异步传递prop到子组件echarts画图问题踩坑总结
效果图: 大致思路:考虑到5张图都是折线图,所以准备用一个子组件承接echarts画图,然后父组件通过prop传递不同数据来展示不同的图 踩坑问题: 1.引入line子组件,画了5个元素,但是只显示一 ...
- webpack踩坑--webpack 2.x升级至4.x
一.安装webpack-cli,webpack@4.26.1 1.npm install webpack-cli -D 2.npm install webpack@4.26.1 -D 二.踩坑 执行n ...
- 微信小程序之mpvue+iview踩坑之旅
因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...
- vue踩坑之旅 -- computed watch
vue踩坑之旅 -- computed watch 经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊 技术点 v ...
- Vue + TypeScript 踩坑总结
vue 和 TypeScript 结合的情况下,很多写法和我们平时的写法都不太一样,这里总结我项目开发过程中遇到的问题和问题的解决方案 有些问题可能还没解决,欢迎各位大佬给与提点. 另外,使用本文前可 ...
- echart 新手踩坑
仪表盘踩坑 我采用的是单文件引入的方式来加载echarts图标也可以使用配置等方式详情参考文档,如果同学们要做出更加丰富的样式请参考文档配置手册配置手册:http://echarts.baidu.co ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~
这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...
随机推荐
- javascript web development es6 pdf js - Cheat Sheet 表格 [vuejs / webcomponents-cheatsheet-2021] 共3套
ES6 预览 VUE2 预览 webcomponents 预览 ES6 2019 pdf下载: https://files.cnblogs.com/files/pengchenggang/javasc ...
- python librosa 实例解析
一 概念 librosa是一个用于音乐和音频分析的python包.它提供了创建音乐信息检索系统所需的构建块. 核心函数: 二 实例解析 实例A,确认是否安装成功: import librosa ...
- Android Studio自带模拟器无法访问网络问题解决
测试APP的时候,发现Android Studio自带的模拟器访问不了百度等网站,之前一直用的好好的,觉得可能是版本的问题,也有可能是公司网络的问题(因为在家里的电脑的Android Studio的模 ...
- Tornadofx学习笔记(3)——使用Maven编译成jar包
之前我都是使用的IDEA自带的工具来编译jar包 但是增加了新的依赖,又得去修改project structure的依赖,过于麻烦 某天Android开发的时候,想到gradle可以一键打包,是不是m ...
- 虚幻引擎UE4如何实现打包后播放片头?其实超简单!
虚幻引擎作为一款全球性的3D实时开发工具,不仅在游戏行业,其在建筑.影视.医疗等行业也被广泛使用.作为开发人员,有时开发的UE虚幻引擎项目比较大,开始运行项目时需要等待较长的时间,还有些公司要求添加片 ...
- String内存模型和Java常用方法
一.String内存模型 1.直接赋值创建string对象内存原理: StringTable(串池):字符串常量池,用来存储字符串,只能是在直接赋值中使用才会存在串池当中(JDK7前串池是在方法区里面 ...
- Win10 如何在桌面显示我的电脑
Win10桌面右键鼠标,然后在弹出来的选项中选择个性化. 选择了个性化后会弹出设置界面,在设置中选择[主题] 找到[桌面图标设置] 点击[桌面图标设置],会弹出一个对话框,该对话框有可以设置显示的图标 ...
- 嵌入式C语言设计学习之C语言回顾
C的基本语法-回忆 1.C的结构 C语言的结构还是以函数为主体,通过其他资源的添加来实现高级语言逻辑.所有的操作都是基于主函数展开的.以主函数为顺序列表,其他函数作为功能模块,组成一个完整的系统.所以 ...
- Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019
在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出Gaussian YOLOv3.该算法在保持实时性的情况下,通过高斯建模.损失函数重建来学习bbox预测值的不确定性,从而提高准确率 ...
- Modbus报文详解
Modbus是一种串行通信协议,最初由Modicon公司(现为施耐德电气的一部分)在1979年为使用其PLC(可编程逻辑控制器)而开发.Modbus已成为工业领域内广泛使用的一种通信协议,特别是对于监 ...