[数据分析与可视化] 数据绘图要点2-Y轴的开始与结束
数据绘图要点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轴的开始与结束的更多相关文章
- Highcharts属性与Y轴数据值刻度显示Y轴最小最大值
Highcharts 官网:https://www.hcharts.cn/demo/highcharts Highcharts API文档:https://api.hcharts.cn/highcha ...
- Python数据分析matplotlib可视化之绘图
Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单. Python中通过matplotlib模块的pypl ...
- Echart实现多个y轴,坐标轴的个数及名称由后台传过来的json数据决定。
yAxis: function(){ var yAxis=[]; for(var i=0;i<legend1.length;i++){ var item={ name:legend1[i], t ...
- Chart.js Y轴数据以百分比展示
新手一枚,解决的问题喜欢记录,也许正好有人在网上迷茫的百度着.-0- 最近使用Chart.js做折线图的报表展示,直接显示整数啥的很好弄毕竟例子直接在哪里可以用,百分比就没办法了.百度慢慢汲取营养,虽 ...
- 在线报表设计实战系列 – 制作多Y轴组合图表(8)
葡萄城报表是一套强大的报表开发和系统搭建工具,既能与您开发的报表软件项目紧密集成,也可独立部署运行,支持多数据源,具有无编码.灵活.稳定等特性,可以帮您快速搭建专业的报表软件系统,实现各类报表的设计. ...
- 学机器学习,不会数据分析怎么行——数据可视化分析(matplotlib)
前言 前面两篇文章介绍了 python 中两大模块 pandas 和 numpy 的一些基本使用方法,然而,仅仅会处理数据还是不够的,我们需要学会怎么分析,毫无疑问,利用图表对数据进行分析是最容易的, ...
- 《Python数据分析》笔记——数据可视化
数据可视化 matplotlib绘图入门 为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数 import matplotlib.pyplo ...
- 2017 年 机器学习之数据挖据、数据分析,可视化,ML,DL,NLP等知识记录和总结
今天是2017年12月30日,2017年的年尾,2018年马上就要到了,回顾2017过的确实很快,不知不觉就到年末了,再次开篇对2016.2017年的学习数据挖掘,机器学习方面的知识做一个总结,对自己 ...
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
随机推荐
- day08-MySQL事务
MySQL事务 先来看一个例子 有一张balance表: 需求:将tom的100块钱转到King账户中 执行的操作是: update balance set money = money -100 wh ...
- MatrixOne从入门到实践03——部署MatrixOne
MatrixOne从入门到实践--部署MatrixOne 前两章节我们简单介绍了MatrixOne和源码编译了MatrixOne.本章节将使用不同的部署方式,来部署MatrixOne的服务. 注意:不 ...
- python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)
python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件) requests是一个Python第三方库,用于向URL地址发起请求 bs4 全名 BeautifulSoup4, ...
- 齐博软件 著名的老牌CMS开源系统 X1.0基于thinkphp开发的高性能免费开源PHP开放平台齐博x1.0基于thinkphp框架开发的高性能免费开源系统 主推圈子 论坛 预定拼团分销商城模块
齐博X1--标签变量大全 1.网站名称: {$webdb.webname} 2.网址: {$webdb[www_url]} {:get_url('home')} 3.网站SEO关键词: 首页:{$we ...
- NLP之Bi-LSTM(在长句中预测下一个单词)
Bi-LSTM @ 目录 Bi-LSTM 1.理论 1.1 基本模型 1.2 Bi-LSTM的特点 2.实验 2.1 实验步骤 2.2 实验模型 1.理论 1.1 基本模型 Bi-LSTM模型分为2个 ...
- Eclipse插件RCP桌面应用开发的点点滴滴
Eclipse插件开发的点点滴滴 新公司做的是桌面应用程序, 与之前一直在做的web页面 ,相差甚大 . 这篇文章是写于2022年10月底,这时在新公司已经入职了快三月.写作目的是:国内对于eclip ...
- ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...
- 洛谷 P3201 梦幻布丁 题解
(这篇题解可能没什么营养,主要是记录一下我用map乱搞启发式合并的神奇做法) 首先我们知道,我们肯定要用一堆集合维护每一种数当前的位置,并支持合并和数连续出现的段数两种操作 我发现这个东西并不好搞,但 ...
- mybatis实现数据行级权限拦截
最近在做一个测试平台,其中有一个需求是用户只能看到他有权限的项目数据.一开始这个需求只针对用例模块,我直接在sql后面加上了关联项目权限表.后面因为其他模块也需要这个权限判断,故打算把关联sql抽取出 ...
- RabbitMq简单模式
RabbitMq简单模式 定义一个生产者,负责发送消息到队列中 /** * @author zjh * 生产者发信息 */ public class Producer { /** * 队列名称 */ ...