作者 翎刀 蚂蚁金服·数据体验技术团队

G2Plot 是 AntV 团队打造的开箱即用、易于配置、具有良好视觉和交互体验的通用统计图表库,本文介绍 G2Plot 在打造柱形图背后的各种故事。

背景

柱形图——人们最常使用的图表之一,是一种使用矩形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量,在柱状图上,分类变量的每个实体都表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。

作为最常使用的图表之一,柱状图也衍生出多种多样的图表形式,包括将多个并列的类别聚类形成一组形成的簇状柱状图,将类别拆分成多个子类别形成的堆叠柱状图,横向的柱状图条形图等。

如下图所示的柱状图各种类别的商品销售额对比图:

在业务上,之前我们使用了社区开源的图表库,但在实际使用的过程中,在各种业务数据和场景下,会看到各种细节体验问题,其中一些是我们使用竞品过程的遇到的体验问题,我们针对问题一步步解决;有一些是用户在使用过程反馈的。因此,我们 AntV 团队在图形语法 G2 基础上开发了一图一做的图表库解决方案 G2Plot,解决我们在使用社区开源图表库中遇到的各种体验问题,同时增加基础统计图表的能力,打造开箱即用、易于配置、具有良好视觉和交互体验的通用统计图表库.

下文我们将先描述我们是如何思考和解决这其中的一些体验问题,然后描述我们在柱状图系列图形中添加的增强功能,最后阐述我们对柱状图的默认配置理解。

体验雕琢

轴标签遮挡问题

使用自动旋转策略来避免轴标签遮挡

在柱状图中的分类变量数量比较多,柱状图中的柱子就比较多,图中横轴的轴标签就可能发生重叠和遮挡问题,如下图所示:

可以看到在上图中,图形区域已经不足以以水平横向方式来清晰地显示所有轴标签了,这时则应尝试对轴标签做旋转,如下图所示:

如果图形区域更小,或者出现了更多的柱子,这时就可能出向即使倾斜了 45 度,也会发生轴标签重叠问题,这时则需要将标签倾斜 90 度变成横向:

在 G2Plot 的轴配置中,开启autoRotateLabel,即可开启轴标签的自动旋转策略来避免上述问题。

使用标签省略策略来避免轴标签遮挡

当然,在使用过程中,用户仍然可以选择指定轴标签的倾斜方案,即用户指定轴标签是横向显示、垂直显示、还是倾斜 45 度显示,这时候遇到轴标签重叠的情况下,则采用抽样省略的方法,抽样规则在横向、倾斜、和垂直显示都能正常进行抽样省略显示一些轴标签,如在选择标签横向时,抽样省略如下图所示:

在选择标签倾斜 45 度时,抽样省略显示如下:

同样,在 G2Plot 中,开启autoHideLabel,即可开启轴标签抽样省略策略。

另外,如果 X 轴为日期型或连续型数据时,省略标签非常合理,但 X 轴为分类数据时,省略标签是不合理的,例如:我们无法推断出上图书架和器具之间省略的标签值,违背了 AntV 设计原则(详见下文)中的有效原则 --- 图表需要有效展示数据信息。但如果 X 轴标签全部展示出来会出现遮挡的问题,影响可读性,同样无法有效展示数据信息,而且还会影响图表数据清晰的呈现和图表的美。两害相权取其轻,我们最终选择了提供标签省略策略来避免轴标签遮挡。

轴标签被图形区域遮挡

在我们使用社区图表库中的状图过程中,当用户选择配置 Y 轴的最大值和最小值来限制图形范围时,会出现轴标签和图形区域遮挡的问题,下图用户设置了最大值 20 万,最小值-1 万:

可以看对,图中标注的地方破坏了图表设计原则中有效展示数据信息和图表美的原则。我们在 G2Plot 中优化了这个问题,裁剪了超出最小值和最大值范围的图形,特别要注意一个细节,如果最小值和最大值跨越了 0 值,一定要展示 0 刻度线,如下图所示:

数据标签位置和样式数据标签:是对当前的一组数据进行的内容标注

数据标签和柱子的对应关系如何更直观的呈现给用户?应该遵循就近原则,数据标签离柱子越近,对应关系越直观,所以:当柱子宽度大于数字标签长度时,数字标签放在柱子内部

当柱子宽度小于数字标签长度时,数字标签放在柱子顶部

堆积柱状图、堆积条形图的数字标签只能放在柱子内部

数据标签在柱子内部引发的新问题

当数据标签放置在柱子内部时,在柱子颜色不同时,如果继续采用黑色数据标签文本,则会发现数据标签和柱子颜色区分度则不明显,此时我们又做了如下策略数据标签颜色随柱子颜色变化动态调整

数字标签溢出的问题

在堆积柱状图中,由于堆积的特性,数据标签统一显示在柱子内部,当数字标签宽度小于柱子宽度时,使用动态调整数据标签颜色即可;如果数据标签超出柱子宽度时,溢出的部分在白色背景中看不清,需要对文本描边处理:

数据标签抽样

与轴标签一样,数据标签在数据密集的情况下,也同样会出现数据标签之间的重叠和遮挡问题,如下图中各种柱状图中优化前示例:

可以看到,这里简单地将所有地数据标签直接显示出来了,有很多标签被遮挡,用户根本无法阅读,显示的标签根本没起作用,所以在图形体验升级过程中,对数据标签的抽样省略也是我们一个重点:对于基础柱形图,可以检查对发生重叠的数据标签进行隐藏,同时优先显示首位的数据标签,效果如下:

对于簇状柱状图,考虑每一簇分组中靠右的数据标签优先原则进行隐藏显示:

对于堆积柱状图,处理则较简单,对于柱子高度不足以显示数据标签的则直接省略显示

体验增强

在上文中,我们挑选了轴标签和数据标签在使用过程的问题,描述了我们是怎样一步步的改善和解决的。此外,我们也对柱状图的一些使用场景支持了一些新特性。

增强一:海量柱子下的交互增强方案

首先看下图所示的柱状图,可能第一眼都可能几乎看不出这是一个柱状图,其实这是一个横轴分类变量非常多的柱状图,其中分类变量是中国城市:

在这种场景下,用户很难区分具体某个城市的销售额情况,更谈不上对比了,那这种情况应该如何应对呢?缩略轴交互:使用缩略轴组件用户可以只关注数据其中某个区间的场景

https://cdn.nlark.com/yuque/0/2019/gif/235434/1576570278845-6831b578-027e-42e0-9f9f-0a5baa77b997.gif#align=left&display=inline&height=429&name=2019-12-10%2020-09-34.2019-12-10%2020_11_06.gif&originHeight=968&originWidth=1684&size=4631347&status=done&style=shadow&width=746​cdn.nlark.com

通常图表库都会提供缩略轴交互,在 G2Plot 中也同样提供了,G2Plot 相比其他社区图表库的体验友好之处:缩略轴可以搭配折线图、柱状图多种统计图表

缩略轴左右文本会根据位置自动调整文本位置

滚动交互:更加自然的交互方式

另外,我们也提供了滚动条交互,用户可以在使用滚动来一次浏览一部分数据,包括对条形图的垂直滚动支持柱状图的水平滚动

条形图的垂直滚动

增强二:区域联动带来更直观的对比效果

在上文背景中,我们提到了柱状图的主要作用是用来对不同类别进行数值比较的图表,为了更加方便用户直观进行比较分支,我们还提供了区域联通组件,如下图所示,用户可以通过区域联通组件来直观地进行对比查看。

默认最佳配置

为了给用户提供最优的图表体验,我们在柱状图系列中按照设计原则默认使用最佳的配置。

案例一:图例的默认位置

图例是对图形本身的概括。通常人的视觉动线是从上至下,从左到右。默认把图例放在左上角去做一个通用的方案看起来没毛病。但更好的做法是:缩短用户对照图例看图形的本能路径,提升信息获取效率

左侧簇状图柱子颜色从左到右排序,图例亦从左到右排序,右侧堆叠柱状图柱子颜色从上倒下排序,图例亦从上到下排序,一一映射,信息获取效率更高。

虽然图例的位置从技术上支持了 12 个位置,我们总结了图例在不同的图表类型中不同的位置后,经过克制收敛为两类。

设计者和观看者甚至并不会感知到位置的变化,但是对应图形获取信息的效率就在不经意间提升了。

案例二:数据标签默认显示规则

上文我们已经提到我们对柱状图的数据标签做了很多的优化和调整,那对柱状图条形图中各种具体的图形的数据标签应该给怎样的默认配置呢?在 G2Plot 数据标签的默认配置中,我们主要考虑数据标签文本是否能够在柱子内显示完全,首先确定的是数据标签文本是从左往右的书写和阅读顺序,那在柱状图和条形图中的柱子中就需要区分对待,这里列出一种简单的策略:在柱状图等垂直的柱子中,由于柱子宽度大部分情况下可能不能完全显示数据标签文本,因此在柱状图中默认不显示数据标签

在条形图等水平的柱子中,由于柱子是水平的,文本方向和柱子方向一致,因此默认显示数据标签

AntV 设计原则

总结一下,我们对柱状图的体验优化遵循的原则即是 AntV 数据可视化设计原则。AntV 设计原则是基于 Ant Design 设计体系衍生的,具有数据可视化特性的指导原则。它遵循 Ant Design 设计价值观的同时,对数据可视化领域的进一步解读,如色彩、字体的指引。

我们经过大量的项目实践和经验总结,总结了以下四条核心原则,并以重要等级进行排序,四条原则相辅相成且呈递进关系,希望你在设计时也可以采纳:准确:从数据转化到可视表达时不歪曲,不误导,不遗漏,忠实反映数据里包含的信息。

有效:信息传达有重点,克制不冗余,避免信息过载,用最适量的数据-油墨比(Data-ink Ratio)表达对用户最有用的信息

清晰:表现方式清楚易读,具条理性,可以帮助用户快速达成目标,在最少的时间内获取更多的信息。

美:对数据的完美表达,合理利用视觉元素进行艺术创作,不过度修饰,给用户优雅的体验。

antdesign 柱状图_你绝对想不到柱形图背后有这么多故事相关推荐

  1. antdesign 柱状图_以Ant Design为例:看B端设计的基本套路

    是不是觉得C端设计已经渐渐趋于成熟,上车慢了?没关系,现在下手B端设计也来得及的.嗯,重要的是不知道怎么下手,怎么办? 这就道来,按照下面的法则,至少可以让设计不会出大错. 一.整体的框架图 首先,一 ...

  2. matlab 画年增长率 命令,matlab画柱状图_中国gdp增长率_gdp柱状图

    2011年海南GDP柱状图-海南十年 综合经济实力提升最快 民生投入最 JPG,550x369,231KB,373_250 美国2014gdp预测增长,美国GDP增速强力恢复 ,美国2014gdp预测 ...

  3. a dirty mode 计算机_那把匕首四年后重现江湖《Savage Mode II》背后隐藏了哪些故事?...

    好久没发文章了,先在这佳节之际祝大家假期愉快,如果你开始上班了当我没说.今天带来的是<Savage Mode II>背后的故事以及个人的一些感悟. 那把匕首四年后重现江湖,来看看这背后隐藏 ...

  4. 如何在ppt中生成柱状图_如何在ppt中制作柱形图和曲线图

    如何在 ppt 中制作柱形图和曲线图 篇一: ppt 柱状图与线状同在的操作 用 excel2010 制作双轴柱线复合图表 就是要用 excel2010 做一个这样的图表: excel2010 中,左 ...

  5. python画柱状图代码-python绘制双柱形图代码实例

    图表是比干巴巴的表格更直观的表达,简洁.有力.工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数.活跃用户数.点击某个按钮的人数,并且通过邮件或者网页展示出来.当我们想关注比数值本身 ...

  6. matlab 图案 柱状图_值得收藏 | 如何用matlab做出酷炫的图像

    1.基础知识 1.1 二维图形绘制 plot函数是Matlab绘制二维图形的常用函数,该函数将数组中的数据点绘连起来构成一条连续的曲线. plot(x,y,'PropertyName',Propert ...

  7. python动态柱状图_动态排名柱状图的两种做法

    受B站拜年祭发射最多的弹幕是什么?视频启发,对日常维护工作中的故障硬件也做了一次盘点.这里介绍两种方法,第一种是Python + Matplotlib:第二种是利用GitHub上现成的"轮子 ...

  8. 怎么用python绘制柱状图_如何用python快速简单的制作柱状图?

    柱状图大家都会制作,那么你会用python制作柱状图吗? 我们先来看一下柱状图的定义:柱形图,又被称为长条图.或者柱状统计图,也叫作条图.条状图.棒形图,本质上来说就是一种以长方形的长度为变量的统计图 ...

  9. 如何在ppt中生成柱状图_在ppt中做柱状图的方法图解步骤

    ppt中经常用到图表,比如柱形图.圆饼图等,这些图就是基于一定的数据建立起来的,所以我们得先建立数据表格然后才能生成图表,为此 学习啦小编为你准备了在ppt中做柱状图的方法,希望对你有所帮助. 在pp ...

  10. 地图上显示柱状图_你见过哪些比较炫酷的地图可视化呈现?

    帝都24小时图鉴​mp.weixin.qq.com 一座城市总有那么一些特殊的场景和时刻,让人很容易就对这个城市产生特殊印象.据统计,北京有超1000万的工作人口,在这庞大的数字背后,显现了北京上班族 ...

最新文章

  1. java strim性能_你所不知道的Java性能优化之String!
  2. Servlet——ServletConfig
  3. 上海市新能源汽车数据平台引入阿里云Lindorm数据库,成本下降20%
  4. 『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积
  5. Matlab与C/C++/Java的一些区别
  6. slow log php,善用php-fpm的慢执行日志slow log,分析php性能问题
  7. oracle客户端和ssh区别,oracle 使用SSH 转发功能
  8. Struts2的输入验证(三)-短路验证与非字段验证
  9. html5 replace,js replace 与replaceall实例用法详解
  10. 介绍个好点的,JAVA技术群
  11. 在Django中使用F()函数
  12. Cocos Creator 如何在 VideoPlayer 上面放置 UI 控件
  13. Tomcat自己解压WAR包
  14. n个人有c个魔法帽几天去掉所有的帽子
  15. SDS之BlockChain Storage系列:3、为什说区块链存储是下一个热点 (上)
  16. MATLAB绘制开环单位阶跃响应,MATLAB语言与控制系统仿真-参考 答案-第5章.doc
  17. Kafka安装详细教程
  18. 示例-Luat示例-HTTP
  19. 剑指 Offer 31-40
  20. compat-wireles的理解

热门文章

  1. 【有利可图网】PS教程:用滤镜打造3D立体文字效果
  2. 独家 | 想成为一名数据科学家?你得先读读这篇文章
  3. java puppeteer生成pdf_PuppeteerSharp导出PDF(带页码)
  4. Java实现对已有的PDF添加页码
  5. 学计算机的的用87键键盘可以吗,键盘87和108键区别
  6. 网站在线客服系统源码|在线客服代码下载 (2021最新版)
  7. 什么是WiFi探针?
  8. 《BPF( 伯克利数据包过滤器 ) Performance Tools》 第二章 技术背景
  9. 学习python的第二周 第一天
  10. 【DOORS】产品功能介绍