数据绘图要点2-Y轴的开始与结束

切割或不切割Y轴可能是数据可视化中最具争议的话题之一。基本上,主要问题在于 Y 轴是否应始终从零开始。数据可视化的目的是讲述一个故事,图形表达方式会对可视化讲述的故事产生重大影响。好的可视化可以带出数据的重要方面,但可视化也可以用来隐藏或误导。我们将探讨这一看似简单的问题的一些微妙之处。

Y轴的开始

不好的实例

让我们从显示问题的条形图开始。我们从一个众所周知的问题开始:绘制Y轴(因变量)不从0开始的条形图。条形图由德国经济发展机构 GTAI 创建,来自一个有关德国劳动力市场的网页。在随附的文本中,该机构吹嘘德国工人比其他欧盟国家的工人更有动力,工作时间更长。

看起来德国比瑞典等其他国家有很大的优势,更不用说法国了,对吧?不,这个差距的大小是一种错觉。该图具有误导性,因为表示工作时间的横轴并未归零,而是在 36 处截断。下面,我们重新绘制了该图,其中因变量轴一直归零。现在国家之间的差异似乎可以忽略不计。您可能会注意到,在重新绘制的图表中,我们删除了分隔国家/地区的水平网格线。这些并不是特别具有误导性,但它们增加了视觉混乱,没有任何作用。

好的实例

虽然条形图中的条形应该(几乎)总是延伸到零,但折线图不需要在因变量轴上包含零。例如,下面来自加利福尼亚预算和政策中心的折线图非常好,尽管Y轴不从0开始。

有什么区别?为什么条形图需要在Y轴上包含0,而折线图不需要这样做?一种观点是,这两种类型的图表讲述了不同的故事。通过其设计,条形图强调与每个类别相关的值的绝对大小,而折线图强调因变量(通常为Y值)随自变量(通常为X值)的变化而变化。

那么在某些情况下,如果折线图的Y轴从0开始,会出现什么样的情况? 下图是一张被广泛分享用于表现气候变化的折线图,该折线图的Y轴从0开始。可以得出结论候,气候根本没什么变化。视觉效果看起来像一条扁平线。我们不会看到任何变化,这样这张图对我们来说将变得毫无意义。

但是如果我们通过适当的选择尺度显示,该折线图可能变成下面这样。很显然,这一变化与我们平时所看到的,感受到的是一致的。

因此除了条形图,一般提倡使用基于数据合理的Y轴。也许轴的最小值是您历史上的最低点,也许是您的团队决定需要采取不同行动的触发点。随便设置,只要让它有意义,而不是软件自动为您决定,这是您需要思考的地方。对于那些0不在可能的数据点范围内,则更加不能够将其包含在Y轴中。

Y轴的结束

有些人认为Y轴必须以值的理论最大值为结束。下图表示的是一项调查情况,这会压缩数据并形成一个尴尬的图表,我们无法完全看到发生了什么。这些项中的任何一条实际中都不可能达到100%,因此,Y轴可以不以100%为结束。

如果我们选择一个更接近真实数据结束位置的轴,我们实际上可以更清楚地看到数据。

虽然这确实让我们的数据全面可见,但它可能会遗漏部分故事。如果我们定了一个目标,设置这些项离我们的目标有多远。比如我们有将报告为盟友ally的百分比提高到 75% 的目标。那么75%可以成为该条形图Y轴的结束点。最好让我们这样标记目标,以便我们的目标是显而易见的。

总结

总之,数据可视化会讲故事。相对微妙的选择,例如条形图或折线图中轴的范围,会对图形讲述的故事产生重大影响。当您查看数据图形时,您需要问问自己图形是否旨在讲述一个准确反映基础数据的故事,或者它是否旨在讲述一个希望大家能看到的故事。

条形图强调与每个类别相关的值的绝对值,而折线图强调因变量通常是Y值随着自变量(通常是X值)的变化而发生的变化,这是重点。因此:

  • 条形图:对于这种图表有共识:Y轴应该从0开始。
  • 折线图:对于这种图表没有达成共识,Y轴通常不必0开始。

至于Y轴的结束点,关键问题是你应该为你的Y轴选择一个有意义的最大值。也许最大值是您的目标,这样轴本身就成为您需要讲述数据的故事的一部分。

参考

[数据分析与可视化] 数据绘图要点2-Y轴的开始与结束的更多相关文章

  1. Highcharts属性与Y轴数据值刻度显示Y轴最小最大值

    Highcharts 官网:https://www.hcharts.cn/demo/highcharts Highcharts API文档:https://api.hcharts.cn/highcha ...

  2. Python数据分析matplotlib可视化之绘图

    Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单. Python中通过matplotlib模块的pypl ...

  3. Echart实现多个y轴,坐标轴的个数及名称由后台传过来的json数据决定。

    yAxis: function(){ var yAxis=[]; for(var i=0;i<legend1.length;i++){ var item={ name:legend1[i], t ...

  4. Chart.js Y轴数据以百分比展示

    新手一枚,解决的问题喜欢记录,也许正好有人在网上迷茫的百度着.-0- 最近使用Chart.js做折线图的报表展示,直接显示整数啥的很好弄毕竟例子直接在哪里可以用,百分比就没办法了.百度慢慢汲取营养,虽 ...

  5. 在线报表设计实战系列 – 制作多Y轴组合图表(8)

    葡萄城报表是一套强大的报表开发和系统搭建工具,既能与您开发的报表软件项目紧密集成,也可独立部署运行,支持多数据源,具有无编码.灵活.稳定等特性,可以帮您快速搭建专业的报表软件系统,实现各类报表的设计. ...

  6. 学机器学习,不会数据分析怎么行——数据可视化分析(matplotlib)

    前言 前面两篇文章介绍了 python 中两大模块 pandas 和 numpy 的一些基本使用方法,然而,仅仅会处理数据还是不够的,我们需要学会怎么分析,毫无疑问,利用图表对数据进行分析是最容易的, ...

  7. 《Python数据分析》笔记——数据可视化

    数据可视化 matplotlib绘图入门 为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数 import matplotlib.pyplo ...

  8. 2017 年 机器学习之数据挖据、数据分析,可视化,ML,DL,NLP等知识记录和总结

    今天是2017年12月30日,2017年的年尾,2018年马上就要到了,回顾2017过的确实很快,不知不觉就到年末了,再次开篇对2016.2017年的学习数据挖掘,机器学习方面的知识做一个总结,对自己 ...

  9. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

随机推荐

  1. Kafka与Flume之集成比较

    Kafka与Flume之集成比较 一.Kafka与Flume比较 在企业中必须要清楚流式数据采集框架flume和kafka的定位是什么:flume:cloudera公司研发: 适合多个生产者: 适合下 ...

  2. SpringBoot (四) - 整合Mybatis,逆向工程,JPA

    1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...

  3. bean文档类型定义

    ELEMENT:表示当前 (bean*):表示0到多个bean元素 (property*):表示0到多个property元素 ATTLIST:表示属性 #REQUIRED:表示不可缺少 #IMPLIE ...

  4. 多态特征,instanceof关键字和abstract类

    多态 对象有多种状态.作用:提高程序的可扩展性. 一个对象具备多种状态的能力,这个程序是可扩展的. 前提: 必须有层级关系 继承 实现 继承:子类和父类的关系,一个父类可以有多个子类,说明父类的引用有 ...

  5. IDEA& Android Studio 配置

    1.配置环境 首先要安装好JDK,但不需要单独下载SDK,只需在IDEA或AS的"设置->外观与行为->->系统设置->Android SDK"中下载相应版 ...

  6. SQL--Row_Number() over()的使用

    1.语法 --over里面有两个参数 --partition by 用于分割区域 此参数可选 --order by 用于排序 此参数必有 row_number() over(partition by ...

  7. while循环条件不成立却无法跳出死循环的问题

    在进入循环的时候,实际上是将A从内存加载到寄存器里面运行的,在整个循环中,A这个变量都只是在读取寄存器里面的值. 而当进入中断的时候,中断里面会从内存加载A到寄存器,修改完之后又存到内存里,然后退出中 ...

  8. 4.mysql-进阶

    1.事务 将多个操作步骤变成一个事务,任何一个步骤失败,则回滚到事务的所有步骤之前状态,大白话:要成功都成功:要失败都失败. 如转账操作,A扣钱.B收钱,必须两个步骤都成功,才认为转账成功 innod ...

  9. Ubuntu环境下LLVM 15.0 完全编译 附windows编译LLVM master

    1. 预先安装 sudo apt install ninja-build sudo apt install llvm clang # 第一次编译需要 sudo apt-get install libn ...

  10. Java对象拷贝原理剖析及最佳实践

    作者:宁海翔 1 前言 对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po.Dto.Do.Vo各个表现层数据的转换,也存在于系统交互如序列化.反序列化. Java对象拷贝分为深拷贝和浅拷贝,目前 ...