ECharts Canvas渲染在SVG合理运用

目录
  • Canvas渲染
  • SVG 底图

Canvas渲染

使用 Canvas 渲染器(默认)等价于:使用 SVG 渲染器

var chart = echarts.init(containerDom, null, {renderer: 'canvas'});
var chart = echarts.init(containerDom);
var chart = echarts.init(containerDom, null, {renderer: 'svg'});

在大多数浏览器侧图库中,将选择SVG或画布进行渲染。对于绘制图表,这两种技术通常是可替换的,并且具有类似的效果。然而,在某些情况下,它们的性能和能力是不同的。因此,他们的选择成为一个长期存在的话题,不容易有一个标准答案。 Apache EChartsTM从一开始就使用Canvas绘制图表(除了使用VML for IE8-)。ECharts v4.0发布了SVG渲染器,它提供了一个新的选择。通过在初始化图表实例时将渲染器参数设置为“canvas”或“svg”,可以方便地指定渲染器。 首先向 echarts 注册 SVG 字符串或解析过的 SVG DOM,引用注册过的底图。

$.get('map/organ.svg', function (svg) {
    echarts.registerMap('organ_diagram', {svg: svg});
    var chart = echarts.init(document.getElementById('main'))。
    chart.setOption({
        geo: [{
            map: 'organ_diagram',
            ...
        }]
    });
});

一般来说,Canvas更适合绘制具有大量图形元素的图表(通常由大量数据导致)(例如热图表、地理坐标系或平行坐标系上的大型折线图或散点图),也适合实现一些视觉效果。然而,在许多场景中,SVG具有重要的优势:它具有较低的内存消耗(这对于移动终端尤为重要)、略高的渲染性能,并且在用户使用浏览器内置的缩放功能时不会模糊。 我们可以根据硬件和软件环境、数据量和功能需求综合考虑选择哪种渲染器。

import 'zrender/lib/svg/svg';

在良好的硬件和软件环境以及少量数据(如PC上的业务报告)的情况下,可以使用两个渲染器,而不会产生太多混淆。 在环境较差且性能问题需要优化的场景中,可以通过实验确定使用哪个渲染器。例如,我有以下经历: 当需要创建许多ECharts实例并且浏览器容易崩溃(可能是因为Canvas的数量超过了手机的容量)时,可以使用SVG渲染器进行改进。粗略地说,如果图表在低端Android机器上运行,或者我们使用一些特定的图表,例如水球图表,SVG渲染器可能会更好。 当数据量较大且有许多交互时,可以选择画布渲染器。 我们强烈欢迎开发人员就他们的经验和场景向我们提供反馈,以帮助我们更好地优化。 注意:除了某些特殊渲染可能依赖于画布:例如眩光尾迹效果、混合效果的热图等,SVG支持的大多数功能。

SVG 底图

如果我们想控制SVG中的某些元素或允许某些元素交互,我们首先需要在SVG中标记这些元素:向这些元素添加名称属性(在下文中,我们将添加了名称属性的元素称为“命名元素”)。许多功能(如select、emphasis、focus plus、label、labelLayout和工具提示)取决于元素的命名。 对于以下示例,我们只将name属性name=“named_rect”添加到左侧SVG路径:

<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" fill-rule="evenodd" xml:space="preserve">
    <path name="named_rect" d="M 0,0 L 0,100 100,100 100,0 Z" fill="#765" />
    <path d="M 150,0 L 150,100 250,100 250,0 Z" fill="#567" />
</svg>

option = {
    geo: {
        map: 'some_svg',
        regions: [{
            name: 'element_name_1',
            itemStyle: { ... }
        }, {
            name: 'element_name_2',
            itemStyle: { ... }
        }]
    }
};

虽然SVG元素样式(如颜色、字体、线宽等)可以直接在SVG文件中定义,但ECharts还支持在选项中为命名元素定制样式,这可以提供很多方便。 您可以在geo中设置样式。itemStyle或系列映射。itemStyle(还包括emphasis.itemStyle,select.itemStyle、blur.itemStyle和regions[i].itemStyle以及regions[i]。emphasis.itemStyle,regions[i].select.iitemStyle和regions[i]。select.item Style和region[i]。blur.iitemStyle)。您也可以在此处删除某些命名元素的默认样式(例如,在设置emphasis.itemStyle.color:null后,当鼠标悬停时填充颜色不会改变)。

myChart.on('geoselectchanged', function (params) {
    var selectedNames = params.allSelected[0].name;
    console.log('selected', selectedNames);
});

此外,在使用序列图时,还可以使用visualMap组件为命名元素指定样式。参见烹饪牛的例子。 注意:只有这些命名元素才能在itemStyle中设置样式:矩形、圆形、直线、椭圆、多边形、多段线和路径。

option = {
    geo: {
        map: 'some_svg',
        emphasis: {
            label: {
                show: false
            }
        }
    }
};

虽然可以在SVG中直接定义/来显示文本标签,但ECharts也支持使用geo。标签或序列图。label可在基础地图上设置标签。 默认情况下,在鼠标悬停时启用标签功能。 'name1' 是一个 SVG 元素的名字。

//
myChart.on('click', { geoIndex: 0, name: 'name1' }, function (params) {
    console.log(params);
});

如果使用geo BoundingCoords作为边界矩形。 否则,如果设置了<svg width=“…”height=“…”>,[0,0,width,height]将用作边界矩形。(如果仅设置了宽度或高度,则仅使用[0,width]或[0,height]。)。 否则,如果设置了,则viewBox将用作边界矩形。 否则,从整个SVG的所有元素的并集获得最终的边界矩形。 如果地理中心或地理缩放,则从上述1~4中获得的边界矩形将相应地进行变换。 确认边界矩形后,它将被放置在相应的地理视图端口中: 如果使用layoutCenter和layoutSize,则边界矩形将放置在地理视图端口的中心并尽可能填充(保持纵横比)。 如果使用顶部、右侧、底部和左侧,则边界矩形将被拉伸,并且地理视图端口将被完全填充。

option = {
    geo: {
        map: 'some_svg'
    },
    series: {
        type: 'effectScatter',
        coordinateSystem: 'geo',
        geoIndex: 0,
        data: [
            // SVG local coords.
            [488.2358421078053, 459.70913833075736],
            [770.3415644319939, 757.9672194986475],
            [1180.0329284196291, 743.6141808346214],
        ]
    }
};

以上就是ECharts Canvas渲染在SVG合理运用的详细内容,更多关于ECharts Canvas渲染底图SVG的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue echarts实现改变canvas长和宽自适应

    目录 echarts改变canvas长宽自适应 方法一:根据浏览器宽高为echarts容器赋宽高 方法二:根据echarts容器的父容器的宽高为其赋值 echarts自适应屏幕宽度自动改变大小 echarts改变canvas长宽自适应 存放Echarts的DOM容器,如果给的高和宽是百分比,渲染的时候DOM容器的高和宽是按百分比给的,但是DOM容器下的子元素div和canvas高和宽是根据图标内容渲染.项目应用的时候,底部会有一部分DOM容器和div的高度差,不美观. 希望Echarts的can

  • JS使用canvas技术模仿echarts柱状图

    canvas 画布是html5中新增的标签,可以通过js操作 canvas 绘图 API在网页中绘制图像. 百度开发了一个开源的可视化图表库ECharts,功能非常强大,可以实现折线图.柱状图.散点图.饼图.K线图.地图等多种图表.很多项目都有使用过ECharts开发过图表功能. 本实例教程使用原生js教你开发一个仿ECharts的柱状图.学习本教程之前,读者需要具备html和css技能,同时需要有简单的JavaScript基础. 按照ECharts的开发方法,图表都是生成在一个HTML元素中.

  • ECharts的三维可视化及在微信小程序中使用示例

    目录 在微信小程序中使用 ECharts 三维可视化 在微信小程序中使用 ECharts 关于微信小程序的项目创建. 创建项目后,可以用新项目完全替换weixin项目下载的电子商务/图表,然后修改代码:或者只需将ec画布目录复制到新项目,然后进行相应的调整. 如果采用完全替换的方法,则project.config json中的appid将替换为公共平台上应用的项目id. pages目录下的每个文件夹都是一个页面.可以根据情况删除不必要的页面,然后单击应用程序删除json中的相应页面. 如果只复制

  • 使用node-canvas在服务端渲染echarts图表解析

    目录 踩了很长时间的坑,总算是能跑起来了 友情提示:入坑请慎重 在这个过程中,还有可能报错,比较常见的有这些 我只说说我试过有用的办法 踩了很长时间的坑,总算是能跑起来了 但是如果要我给echarts的SSR一个评价,那就是不好用……可能是我太菜了.而且,因为我是Windows用户,这个过程对Windows极其不友好. 友情提示:入坑请慎重 在服务端渲染图表,绕不开的一个问题就是,没有DOM怎么绘图?这个主要有两种解决方案,一个是用那些headless的浏览器去渲染,然后进行截图:另一个就是在N

  • Echarts图表分析巴西队历年战绩实例详解

    目录 引言 一.源数据 二.安装Echarts 三.背景图实现 四.拐点自定义 五.线条区域渐进色 六.x轴拖拽 七.X轴设置 八.y轴设置 写在最后 引言 在结束的卡塔尔世界杯八分之一决赛中,巴西队以4:1轻松战胜韩国队,连续八届世界杯晋级八强,我的心情无比的激动,看着自己喜欢的球星,内心十分骄傲. 开始创作本文的时候,满怀欣喜,隐隐看到了内马尔举起了大力神杯.时间定格在12月9日,比赛的第124分钟,是的,巴西

  • ECharts Canvas渲染在SVG合理运用

    目录 Canvas渲染 SVG 底图 Canvas渲染 使用 Canvas 渲染器(默认)等价于:使用 SVG 渲染器 var chart = echarts.init(containerDom, null, {renderer: 'canvas'}); var chart = echarts.init(containerDom); var chart = echarts.init(containerDom, null, {renderer: 'svg'}); 在大多数浏览器侧图库中,将选择SV

  • JS页面动态绘图工具SVG,Canvas,VML介简介

    说到绘图.报表之类的技术,大家首先想到的就是Flex,当然也有许多了解javaapplet,对于这两种技术来说,各有利弊. 首先Flex很笨重,但是其效果实在让人喜欢.对于javaapplet来说,至少我在网络上很少看到,当然对于我们做开发的来说在我们的开发工具或者内部网络上还是有一些的. 其实现在Web上进行绘图的话还是有很多选择的,你可以到谷歌上搜索JS绘图,会有很多绘图工具提供给你使用,而且功能非常强大.比如说maxGraph,你可以到http://www.jgraph.com/mxgra

  • vue3+Echarts页面加载不渲染显示空白页面的解决

    目录 vue3 Echarts页面加载不渲染显示空白页面 个人认为造成这个问题的原因 解决这个问题的方法 vue Echarts白屏或等一会才出现 原因 解决方法 vue3 Echarts页面加载不渲染显示空白页面 在父组件获取到数据后传递给子组件并没有及时的更新渲染图表. 在本地开发环境是没有一点问题,但发布到测试环境上每次页面加载都不渲染,点击浏览器刷新按钮后才会去渲染图表. 个人认为造成这个问题的原因 页面加载子组件dom元素此时还没有加载完成,所以看到的就是空白,只有刷新一下才可以. 解

  • vue动态渲染svg、添加点击事件的实现

    业务需求(vue项目中) 1.页面展示svg内容 2.监听svg内部的点击事件 3.动态改变svg内部元素的属性和值 html标签 经多次实验,用embed.img等标签改变src属性的方式,均无法实现上述全部功能(尤其是svg内部点击事件),最终采用Vue.extend()方法完整实现,代码也较为简洁,html结构如下: <template> <div> <div id="svgTemplate"></div> </div>

  • Echarts如何重新渲染实例详解

    当我点击饼图时,出现相应的内容,并重新渲染饼图展示内容 饼图点击事件 this.conechart.on('click', (params) => { params.name }); 获取的是点击的对应的板块名 利用获取的板块名,去接口调取对应的数据 , 调取数据是异步调用 ,所以重新渲染视图要在 异步中渲染,否则同步渲染不出数据 var options = this.conechart.getOption() options.series[0].data = res.data this.con

  • 深入了解响应式React Native Echarts组件

    前言 一种在 React Native 中封装的响应式 Echarts 组件,使用与示例请参见:react-native-echarts-demo 近年来,随着移动端对数据可视化的要求越来越高,类似 MPAndroidChart这样的传统图表库已经不能满足产品经理日益变态的需求.前端领域数据可视化的发展相对繁荣一些,通过 WebView 在移动端使用 Echarts 这样功能强大的前端数据可视化库,是解决问题的好办法. React Native 开发中,由于使用的是与前端相同的 JavaScri

  • vue项目中封装echarts的优雅方式分享

    目录 场景 需求 代码总览 实现 components--chart--index.vue components--chart--index.js components--chart--options main.js chartTest index.vue index.js 代码 总结 补充 补充2:图表高亮轮询,dispatchAction使用 使用方法 附:echarts 饼图调用高亮示例 dispatchAction 补充3:封装echarts地图,姐妹篇 总结 场景 1.Echarts使

  • Vue项目中引入 ECharts

    目录 1.安装 2.引入 3.使用 4.按需引入 ECharts 图表和组件 1.安装 使用如下命令通过 npm 安装 ECharts npm install echarts --save 2.引入 安装完成以后,可以将echarts全部引入,这样一来,我们可以在该页面使用echarts所有组件:引入代码如下: import * as echarts from "echarts"; 3.使用 引入完毕之后,我们可通过echarts提供的接口画出对应的图表,使用方法如下: <tem

  • ECharts图表使用及异步加载的特性示例详解

    目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展.开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互.性能.数据处理等方面有更高的要求. chart.setOption({ color: [ '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3' ], // ...

  • 今天,小程序正式支持 SVG

    今天,小程序正式支持 SVG 写在前面 经过腾讯 Omi 团队的努力,今天你可以在小程序中使用 Cax 引擎高性能渲染 SVG! SVG 是可缩放矢量图形(Scalable Vector Graphics),基于可扩展标记语言,用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准.SVG 的优势有很多: SVG 使用 XML 格式定义图形,可通过文本编辑器来创建和修改 SVG 图像可被搜索.索引.脚本化或压缩 SVG 是可伸缩的,且放大图片质量不下降 SVG 图像可在任何的分辨

随机推荐