高效的时间序列可视化:减少认知负荷获得更清晰的洞察

可视化时间序列数据是具有挑战性,尤其是涉及多个数据集时。精心设计的可视化不仅能清晰地传达信息,还能减少观察者的认知负荷,使其更容易提取有意义的洞察。

在本文中,我们将探讨使真实世界的疫苗接种数据来可视化单个时间序列和多个时间序列。

数据可视化中认知负荷的重要性

认知负荷指的是处理信息所需的心理努力量。在数据可视化的背景下,减少认知负荷意味着让观察者更容易理解数据。这对于时间序列数据尤为重要,因为需要快速准确地解释随时间变化的趋势、模式和关系

可视化单个时间序列

我们首先探讨使用印度的数据来表示单个时间序列的各种方法。

1、无连接线的散点图

无连接线的散点图是可视化时间序列数据的基本方法。但是它往往无法清晰地传达随时间变化的趋势。

 import pandas as pd# Load the COVID-19 vaccination dataseturl = 'https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/vaccinations.csv'data = pd.read_csv(url)# Convert the date column to datetimedata['date'] = pd.to_datetime(data['date'])# Filter data for the years 2020, 2021, and 2022data = data[(data['date'] >= '2020-01-01') & (data['date'] <='2021-12-31')]# Filter data for India, USA, and Brazilcountries = ['India', 'United States', 'Brazil']filtered_data = data[data['location'].isin(countries)]# Select relevant columnsfiltered_data = filtered_data[['location', 'date', 'daily_vaccinations']]import matplotlib.pyplot as plt# Filter data for Indiaindia_data = filtered_data[filtered_data['location'] == 'India']# Scatter plot without connecting linesplt.figure(figsize=(15, 6))plt.scatter(india_data['date'], india_data['daily_vaccinations'], color='blue', marker='.',s=2)plt.title('India - Scatter Plot Without Connecting Lines')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.show()

重叠的数据点可能使辨别趋势变得困难。这种方法要求观察者在脑海中连接各个点,增加了认知负荷。

2、带连接线的散点图

用线条连接各个点可以提高趋势的清晰度,使跟随数据随时间的进展更加容易。

 # Scatter plot with connecting linesplt.figure(figsize=(15, 6))plt.plot(india_data['date'], india_data['daily_vaccinations'], marker='+', color='blue', markersize=2)plt.title('India - Scatter Plot with Connecting Lines')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.show()

线条有助于引导视线沿着时间线移动,减少了理解趋势所需的努力。重要的是要注意这些线条并不代表实际的数据点;它们只是作为视觉引导

3、无点的线图

移除单个点并专注于线条,可以更加强调整体趋势并减少视觉杂乱。

 # Line plot without dotsplt.figure(figsize=(15, 6))plt.plot(india_data['date'], india_data['daily_vaccinations'], color='blue')plt.title('India - Line Plot Without Dots')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.show()

这种风格通过纯粹关注趋势来简化视觉效果,使观察者更容易把握总体模式,而不会被单个数据点分散注意力。

4、填充区域的线图

填充曲线下的区域进一步强调了趋势的大小和方向。这种方法为数据增加了视觉权重,使增长或下降更加明显。

 # Line plot with filled areaplt.figure(figsize=(10, 6))plt.fill_between(india_data['date'], india_data['daily_vaccinations'], color='blue', alpha=0.3)plt.plot(india_data['date'], india_data['daily_vaccinations'], color='blue')plt.title('India - Line Plot with Filled Area')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.show()

填充区域突出了随时间变化的数据量,强化了整体趋势。当你想要同时强调变化的方向和幅度时,这种风格特别有效。

可视化多个时间序列

在可视化多个时间序列时,目标是在保持清晰度的同时允许数据集之间的简单比较。以下是使用印度、美国和巴西数据的三种方法。

不好的设计:无连接线的散点图

我们为多个时间序列创建了一个无连接线的散点图。这是一个常见的错误,可能导致混乱和杂乱的可视化。

 # Filter data for India, USA, and Brazilcountries = ['India', 'United States', 'Brazil']filtered_data = data[data['location'].isin(countries)]# Bad design: Scatter plot without connecting linesplt.figure(figsize=(15, 6))plt.scatter(filtered_data[filtered_data['location'] == 'India']['date'],filtered_data[filtered_data['location'] == 'India']['daily_vaccinations'],label='India', color='orange', s=2)plt.scatter(filtered_data[filtered_data['location'] == 'United States']['date'],filtered_data[filtered_data['location'] == 'United States']['daily_vaccinations'],label='United States', color='blue', s=2)plt.scatter(filtered_data[filtered_data['location'] == 'Brazil']['date'],filtered_data[filtered_data['location'] == 'Brazil']['daily_vaccinations'],label='Brazil', color='green', s=2)plt.title('Bad Design - Scatter Plot Without Connecting Lines (2020-2022)')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.legend()plt.show()

这种设计的问题:

  • 数据点重叠: 散点图显示了各个序列的数据点,但由于没有连接线,很难跟踪每个序列的趋势。并且重叠的点创造了一个杂乱和混乱的视觉效果。
  • 高认知负荷: 观察者必须在脑海中连接这些点以理解趋势,这需要额外的认知努力。这种设计增加了误解的可能性,使观察者难以快速掌握关键洞察。

更好的设计:连接线

我们通过用线条连接数据点来改进设计。这个简单的改变显著提高了图表的可读性。

 # Better design: Line plot with connecting lines and reduced marker size for 2020, 2021, and 2022 dataplt.figure(figsize=(15, 6))plt.plot(filtered_data[filtered_data['location'] == 'India']['date'],filtered_data[filtered_data['location'] == 'India']['daily_vaccinations'],label='India', color='orange', marker='.', markersize=2)plt.plot(filtered_data[filtered_data['location'] == 'United States']['date'],filtered_data[filtered_data['location'] == 'United States']['daily_vaccinations'],label='United States', color='blue', marker='.', markersize=2)plt.plot(filtered_data[filtered_data['location'] == 'Brazil']['date'],filtered_data[filtered_data['location'] == 'Brazil']['daily_vaccinations'],label='Brazil', color='green', marker='.', markersize=2)plt.title('Better Design - Connected Lines (2020-2022)')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')plt.legend()plt.show()

这种设计的改进:

  • 连接线: 连接数据点的线条清晰地显示了随时间变化的趋势,减少了跟踪每个序列所需的心理努力。
  • 更清晰的趋势: 观察者可以快速识别每个数据集的整体趋势,如峰值和低谷等。
  • 减少认知负荷: 通过用线条连接数据点,图表减少了解释数据所需的认知负荷。观察者不再需要在脑海中连接这些点,因为线条已经完成了这项工作。

最佳设计:直接标注

最后我们通过在图表内直接标注趋势线来创建最佳设计。这种方法消除了对图例的需求,使图表更加直观易读。

 # Best design: Direct labeling on lines with reduced marker size for 2020, 2021, and 2022 dataplt.figure(figsize=(15, 6))plt.plot(filtered_data[filtered_data['location'] == 'India']['date'],filtered_data[filtered_data['location'] == 'India']['daily_vaccinations'],label='India', color='orange', marker='.', markersize=2)plt.plot(filtered_data[filtered_data['location'] == 'United States']['date'],filtered_data[filtered_data['location'] == 'United States']['daily_vaccinations'],label='United States', color='blue', marker='.', markersize=2)plt.plot(filtered_data[filtered_data['location'] == 'Brazil']['date'],filtered_data[filtered_data['location'] == 'Brazil']['daily_vaccinations'],label='Brazil', color='green', marker='.', markersize=2)# Direct labeling at the end of the linesplt.text(filtered_data[filtered_data['location'] == 'India']['date'].iloc[-1],filtered_data[filtered_data['location'] == 'India']['daily_vaccinations'].dropna().values[-1],'  India', fontsize=12, color='orange', ha='left', va='center')plt.text(filtered_data[filtered_data['location'] == 'United States']['date'].iloc[-1],filtered_data[filtered_data['location'] == 'United States']['daily_vaccinations'].dropna().values[-1],'  United States', fontsize=12, color='blue', ha='left', va='center')plt.text(filtered_data[filtered_data['location'] == 'Brazil']['date'].iloc[-1],filtered_data[filtered_data['location'] == 'Brazil']['daily_vaccinations'].dropna().values[-1],'  Brazil', fontsize=12, color='green', ha='left', va='center')plt.title('Best Design - Direct Labeling for 2020, 2021, and 2022 Data')plt.xlabel('Date')plt.ylabel('Daily Vaccinations')# Remove the legend as we are using direct labelingplt.legend().set_visible(False)plt.show()

这种设计的主要优点:

  • 直接标注: 标签直接放置在趋势线上,消除了对单独图例的需求这减少了认知负荷并使图表更加直观。
  • **简化设计:**移除图例使图表更加整洁,允许观察者完全专注于数据趋势。
  • 增强可读性: 通过直接标注,观察者可以快速将每条趋势线与正确的数据集关联起来,使可视化更加高效和有效。

为什么减少认知负荷很重要

减少认知负荷对于创建有效的可视化至关重要,特别是对于时间序列数据。当观察者能够轻松理解数据,只需付出最少的努力时,他们更有可能:

  • 快速理解趋势: 精心设计的可视化突出了趋势和模式,允许观察者快速把握关键信息。
  • 避免错误: 清晰的视觉提示和最少的干扰有助于防止对数据的误解。
  • 保持参与: 简单、直观的设计使观察者专注于数据,导致更好的记忆和更深入的洞察。

我们从**“不良""最佳”**可视化的过程说明了在时间序列数据可视化中周到设计的重要性。通过用线条连接数据点并使用直接标注,可以显著减少认知负荷,使数据更容易获取,洞察更加明显。在设计可视化时,始终要追求清晰、简单,并关注观察者的体验。这种方法不仅增强了理解,还确保了数据得到有效传达,从而实现更好的决策和分析。

https://avoid.overfit.cn/post/24bca51d3edd42e7bee89e4b536113d2

作者:Ratan Kumar Sajja

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VScode 连接远程服务器

1、 2、 3、免密登录 1、本地生成密钥 ssh-keygen2、生成的密钥默认在 C:\Users\***\.ssh\ 中3、将私钥 C:\Users\***\.ssh\id_rsa 添加到上面的配置文件中的 IdentityFile 项内4、将公钥 C:\Users\***\.ssh\id_rsa\id_rsa.pub 拷贝到远程 ~/.ssh/authorized_keys 中 4、远程…

wpf 定制 个性圆角信息面板

先上图&#xff1a; 代码实现&#xff1a; <Canvas Grid.Column"1"><Border Background"#5665F4" BorderBrush"#5665F4" BorderThickness"0.5" CornerRadius"10,10,10,30"Width"180" Height"165&qu…

图解Redis五大数据类型

五种数据类型的不同之处&#xff0c;是value在存储时的形式不同。 hash类型 value类型是<key,value>键值对。如果发生hash冲突&#xff0c;用开放定址法解决&#xff0c;不拉链&#xff01; key值重复&#xff0c;则新值覆盖旧值 List类型 Set类型 与List的类似&…

C语言中的预处理详解

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 举个例⼦&#xff1a; printf("file:%s line:%d\n", __FILE__, __LINE__); 2. #define 定义常量 基本语法&#xff1a; #define name stuff 举个例…

openlayers+vite+vue3加载离线地图并实现初始化(一)

前景提示&#xff1a;本文主要讲解使用vite工具构建的项目&#xff0c;利用openlayers实现离线地图的主要一些功能&#xff0c;包括初始化地图、打点、画线、弹窗等等&#xff0c;这些后续有时间会持续为大家更新&#xff0c;本文主要阐述如何实现其首要功能离线地图的初始化。…

【python报错已解决】`Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 在开发过程中&#xff0c;环境配置常常会引发一些难以预料的报错。如何快速定位并解决这些问题&#xff0c;成…

借题《黑神话悟空》,聊聊UE5 游戏开发中基本的 C++ 概念

最近火的一塌糊涂的《黑神话悟空》就是用UE5引擎开发的。借题发挥&#xff0c;今天讲讲UE游戏开中的一些C基本概念&#xff1b; 编写代码与蓝图&#xff08;可视化脚本&#xff09;相结合具有独特的功能&#xff0c;您需要利用这些功能来实现两全其美。编程可以帮助创建更复杂…

在树莓派5上使用pytroch进行模型训练—全流程笔记

在树莓派上运行pytroch模型&#x1f680; 在完成了树莓派的一系列基础配置学习之后&#xff0c;按照规划&#xff0c;下一步要做的就是在树莓派上安装一个pytorch&#xff0c;尝试运行一下深度学习的模型&#xff0c;如果可以实现且准速度有一定保证的话&#xff0c;就可以作为…

linux(Ubuntu )搭C++ 最新版GDAL完整教程

在前面的文章中主要是介绍如何在windows系统下利用python安装gdal库&#xff0c;如下&#xff1a; 如何快速安装GDAL 在linux环境下python安装gdal也可以利用现成的whl文件&#xff0c;但是安装c GDAL环境的比较麻烦&#xff0c;目前网络上大多是安装的老版本的教程&#xff…

uniapp在线视频监控开发

我这里是uniapp开发的H5项目 视频流是flv模式 用到的插件是flv.js Flv.js Flv.js 是 HTML5 Flash 视频&#xff08;FLV&#xff09;播放器&#xff0c;纯原生 JavaScript 开发&#xff0c;没有用到 Flash。。由 bilibili 网站开源。 常见直播协议 RTMP: 底层基于TCP&…

安泰ATA-7015高压放大器在机器人测试中的应用研究

随着机器人技术的快速发展&#xff0c;机器人在各个领域的应用日益广泛。然而&#xff0c;要确保机器人能够稳定、准确地完成各种任务&#xff0c;就需要对其进行严格的测试和评估。在机器人测试过程中&#xff0c;高压放大器作为一种关键的测试设备&#xff0c;发挥着不可替代…

基于YOLOv8的无人机高空红外(HIT-UAV)检测算法,魔改SimAM注意力助力涨点(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的无人机高空红外&#xff08;HIT-UAV&#xff09;检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;魔改SimAM注意力&#xff0c;引入切片操作&#xff1a;mAP从原始的…

python-随机序列(赛氪OJ)

[题目描述] 小理的作业太多了&#xff0c;怎么也做不完。 小理的数学作业由 T 张试卷组成&#xff0c;每张试卷上有 n 个数 a1..n​ &#xff0c;小理需要算出这些数的极差和方差。极差是一个整数&#xff0c;方差是一个浮点数&#xff0c;要求保留到小数点后 3 位。虽然题目很…

第100+22步 ChatGPT学习:概率校准 Platt Scaling

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

Unet改进3:在不同位置添加NAMAttention注意力机制

本文内容:在不同位置添加NAMAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 识别不太显著的特征是模型压缩的关键。然而,它在革命性的注意机制中尚未得到研究。在这项工作中,我们提出了一种新的基于归一化的注意力模块(NAM),它抑制…

2024/8/25 Nacos本机配置

目录 一、nacos下载 二、修改配置文件 2.1、配置数据库 2.2、配置鉴定密钥 2.3、配置启动脚本 三、nacos启动 3.1、启动运行脚本 3.2、新增配置 3.3、服务列表 记录一下本机nacos2.2.3配置全过程 一、nacos下载 下载地址&#xff1a;https://github.com/alibaba/nacos/r…

【通俗易懂】分库分表时分表字段应该如何选择?

目录 一、按买家ID分还是卖家ID分&#xff1f; 二、卖家查询怎么办&#xff1f; 三、订单查询怎么办&#xff1f; 在分库分表的过程中&#xff0c;我们需要有一个字段用来进行分表&#xff0c;比如按照用户分表、按照时间分表、按照地区分表。这里面的用户、时间、地区就是所…

MYSQL————数据库的约束

1.约束类型 1.not null&#xff1a;指示某列不能存储null值 2.unique&#xff1a;保证某列的每行必须有唯一值 3.default&#xff1a;规定没有给列赋值时的默认值 4.primary key&#xff1a;not null和unique的结合。确保某列&#xff08;或两个或多个列的结合&#xff09;有唯…

游戏开发设计模式之命令模式

目录 命令模式的定义和工作原理 应用场景 实现方式 优点 缺点 结论 命令模式在游戏开发中的具体实现案例是什么&#xff1f; 如何在Unity3D中有效地实现和管理命令模式以提高游戏性能&#xff1f; 命令模式与其他设计模式&#xff08;如观察者模式、状态模式&#xff…

2024前端面试题-js篇

1.js有哪些数据类型 基础数据类型&#xff1a;string,number,boolean&#xff0c;null&#xff0c;undefined&#xff0c;bigInt&#xff0c;symbol 引用数据类型&#xff1a;Object 2.js检测数据类型的方式 typeof&#xff1a;其中数组、对象、null都会被判断为object&…