点击蓝字

关注我们

背景

目前 Blazor 中可用的图表组件库主要有以下几个:

  • ant-design-blazor/ant-design-charts-blazor

    -基于G2Plot

  • mariusmuntean/ChartJs.Blazor

    - 基于ChartJs

  • blazor-cn/Blazor.ECharts

    - 基于ECharts

ant-design-charts-blazor是我主导完成的,相关使用教程可参阅《进击吧!Blazor!》系列入门教程 第一章 7.图表(https://blog.csdn.net/TimChen44/article/details/114295041)

然而这些图表库无不例外的采用的JS库进行二次分装,基本实现方式雷同,我以ant-design-charts-blazor举例

大致逻辑如下:

  1. 首先通过IJSRuntime接口与自己开发的own.js进行交互

  2. own.js中对图表库的api做了简单封装,主要目的是减少.razor与G2Plot的交互,毕竟IJSRuntime接口调用js对象没有js之间直接相互调用方便

  3. G2Plot会在Canvas中绘制出图表

  4. 图表中的一些事件通过own.js进行捕捉后通过IJSRuntime反馈给.razor

ant-design-charts-blazo r的技术实现方式,可详见我之前的文章《用Blazor技术封装G2Plot实现Charts组件》(https://zhuanlan.zhihu.com/p/163808856)

看了上述内容,我们思考一下,Blazor技术将C#带到了前端,我们却继续使用着JS的图表库,合理吗?

明显不合理,所以我们应该去创建一个基于Blazor技术构建的图表库替代上面的JS库。

到这里还有一个小问题,就是 Canvas 提供的接口都是面向 JS 的,那么我们需要另外一个绘图技术,需兼顾功能和性能,其实不用选,SVG,就是你了。

可缩放矢量图形(Scalable Vector Graphics,SVG),是一种用于描述二维的矢量图形,基于 XML 的标记语言。作为一个基于文本的开放网络标准,SVG能够优雅而简洁地渲染不同大小的图形,并和CSS,DOM,JavaScript和SMIL等其他网络标准无缝衔接。

BlazorCharts

BlazorCharts 是我主导的开源项目,目标是创建一个基于Blazor技术,使用简单,功能相对丰富的图表库。

项目地址:https://github.com/TimChen44/blazor-charts

项目信息

首先,确定一个图标,俗话说图标确定后项目就完成了一半????,以本人的能力,只能将图表和@合并,设计出“缝合怪”作为我的图标????

接着,再确定我们组件的一些基本理念,我今后的设计尽我所能满足这些理念。

  • 使用简单

    组件库是拿来用的,所以使用方式要简单,使用方法要符合常规逻辑,争取使用时最大可能的减少对文档的依赖。

  • 功能实用

    实现一堆极少场景才会使用的图表,不如集中精力做好用的最多的那些图表。实现一堆极少场景才会使用的功能,不如集中精力做好用的最多的那些功能。

  • 信息直观

    使用图表的核心目的是解决表格数据显示不直观的问题,所以不论功能、布局、颜色、动画都是为了这个服务。

实现方式介绍

首先我们看一下图表包含的基本元素

基于这个结构,下面是我项目的类图,通过一些抽象,将图表的一些元素进行了归纳。

图表中每一个元素的大小位置变化都会影响到其他元素,所以位置和布局的确定存在一个先后关系,顺序如下:

图表效果

下面是一个最简单的图表示例

所需的配置

<BcChart Height="600" Width="800" Data="DemoData.Githubs" CategoryField="x=>x.Year.ToString()"><BcTitle Title="图表示例" TData="Github"></BcTitle><BcAxesY TData="Github" GridLineMajor="true" GridLineMinor="true"></BcAxesY><BcLegend TData="Github" BorderWidth="1" Position="LegendPosition.Bottom"></BcLegend><BcColumnSeries TData="Github" ValueFunc="x=>x.Sum(y=>y.View)" GroupName="View"></BcColumnSeries><BcColumnSeries TData="Github" ValueFunc="x=>x.Sum(y=>y.Start)" GroupName="Start"></BcColumnSeries><BcLineSeries TData="Github" ValueFunc="x=>x.Sum(y=>y.Fork)" GroupName="Fork" IsSecondaryAxis="true"></BcLineSeries>
</BcChart>

所需的数据

static class DemoData
{public static List<Github> Githubs = new List<Github>(){new Github(){Year=2017,View =2500,Start=800,Fork=400},new Github(){Year=2018,View =2200,Start=900,Fork=800},new Github(){Year=2019,View =2800,Start=1100,Fork=700},new Github(){Year=2020,View =2600,Start=1400,Fork=900},};
}

更多内容请观看下面的视频

MSReactor

扫码|关注我们

Bilibili|微软Reactor_SH

新浪微博|MSReactorShanghai

知乎|微软 Reactor

你们点点“分享”,给我充点儿电吧~

BlazorCharts 原生图表库的建设历程相关推荐

  1. Android原生图表库调研

    曾经由于项目需要使用过一些开源的安卓原生图表库,但是没有系统整理过,最近又遇到这个需求,遂整理一下省得日后重蹈覆辙. 名称 支持图表类型 License XCL-Charts - (3D/非3D,背向 ...

  2. 数据可视化,BizCharts图表库入坑历程

    前言 作为一个前端打字员,除了绿茶婊之外,最讨厌的就是图表:一个让我伤心,一个让我难过:比这更讨厌的就是文档写得不清不楚的图表库(大概率是九年义务教育期间没有学好语文),让我又爱又恨!所以本篇博文会比 ...

  3. 可视化入门:从 0 到 1 开发一个图表库

    作者介绍 万木:蚂蚁体验技术部前端工程师,AntV G2 栈的核心维护者,多次在 IEEE Vast Challenge,ChinaVis Challenge 等数据分析挑战赛中获得优异成绩.喜欢写代 ...

  4. 小程序进阶-图表库uchart

    一.图标库 常用图标库有:echart,wx-chart,ucharts. wx-chart:没有维护了: echart:更倾向于pc: ucharts:专为小程序而生,他是伴随小程序跨端框架uni- ...

  5. WiFi雷达—近场立体定位服务平台的建设历程

    本文作者:hugoma,腾讯 CSIG 开发工程师 终端厂商在发力培养负一屏的流量新入口.近场服务,是vivo.OPPO等厂商在2018年下半年推出的新招.如何精准的实现shoping mall等场景 ...

  6. 适用于任何数据可视化需求的国外10个最佳JavaScript图表库

    如今,数据量呈指数级增长,我们看到的信息越多,处理它的难度就越大.这就是为什么我们需要数据可视化--在图表和仪表板中,最好是交互式的.它帮助我们人类节省了大量时间和精力来查看,分析和理解数据,并根据这 ...

  7. js折线图设置y轴刻度_手绘风格的 JS 图表库:Chart.xkcd

    本文作者:HelloGitHub-kalifun 图表库千万个今天 HelloGitHub 给大家推荐个很有"特色"的图表库:一个手绘风格的 JS 图表库 -- Chart.xkc ...

  8. f2 柱状图滚动 钉钉小程序_钉钉小程序图表库AntV - F2 使用总结

    项目涉及图表部分的技术选型 对于图表这块的开发,使用一些流行的图表库可以大大提高我们的开发效率,目前较为流行的图表库大概有Echarts,Hcharts,AntV,他们都是大同小异,我印象比较深刻的是 ...

  9. 400多家单位、30余万科研人员,10多年奋斗!北斗卫星核心器件实现100%国产!(附:北斗研发建设历程​)...

    来源:EETOP 国务院新闻办公室8月3日上午10时举行新闻发布会,中国卫星导航系统管理办公室主任.北斗卫星导航系统新闻发言人冉承其介绍,工程建设提前半年完成,彰显中国速度."北斗三号200 ...

最新文章

  1. Python中乐高积木——函数
  2. PCV相关指标控制要求
  3. mkfs.jffs2参数详解
  4. html5显示字母的值,使用HTML5 Canvas API控制字体的显示与渲染的方法
  5. 虚拟CentOS访问Windows下共享文件(二)
  6. 男子拒绝春节带电脑回家工作被开除,最后结果十分舒适...
  7. GPU Gems 1: Chapter 22. Color Controls
  8. postman导出Collections后再导入时,打开内容为空
  9. c++标准程序库:STL容器之vector
  10. Luogu1919 【模板】A*B Problem升级版(FFT快速傅里叶)
  11. 高数常见的符号及其读法
  12. 1100个商务企业宣传通用PPT模板免费下载网址
  13. 令牌环网Token Ring协议
  14. 国家二级计算机考试题库操作题素材,【2018-2019】计算机excel操作题题库,带素材-范文word版 (17页)...
  15. VS2003镜像安装
  16. VScode 亮暗 高对比度 主题推荐
  17. 51Ditu开放了地图服务API接口
  18. 技术专栏 | 为什么要基于模型设计?
  19. px4原生源码学习-(1)
  20. 印度电线标准IS 694(R2020),印度插头标准IS 1293(R2020)

热门文章

  1. 【心情】今天买了ZÈRTZ!
  2. sudo 安装 常见错误
  3. 2019.04.24笔记
  4. 码农与UI沟通的日常
  5. android http请求
  6. 淘宝一淘网收录部分垂直B2C网站信息
  7. PostgreSQL表的行数统计
  8. Mac OS使用技巧之二:修改变量Path解决android: command not found
  9. airdrop 是 蓝牙吗_您可以在Windows PC或Android手机上使用AirDrop吗?
  10. 重新学习web后端开发-001-写在前面的话