科研绘图(三)百分比堆叠线条图

百分比堆叠线条图是一种数据可视化工具,它结合了堆叠面积图和线条图的特点。在这种图表中,时间序列数据被分成几个部分,每个部分代表一个类别,所有类别的值加起来总和为100%。这种图的每个点的堆叠区域代表不同类别在特定时间点的百分比贡献。

优点:

1. 展示趋势和组成: 百分比堆叠线条图可以同时显示各个组成部分随时间变化的趋势以及它们对总量的相对贡献。

2. 比较容易: 由于总量始终为100%,用户可以很容易地比较不同类别在不同时间点的相对大小。

3. 节省空间:相比于多个分开的图表,一个百分比堆叠线条图能在单一视图中显示多个类别的信息。

4. 视觉连续性:这种图表类型利用颜色和堆叠区域的连续性,有助于观察者追踪随时间变化的趋势。

缺点:

1. 局限性: 只能显示部分总和恒等于100%的数据,不适合绝对值变化很大的数据。

2. 误导性: 如果某个类别的变化很大,可能会造成视觉上的误导,观察者可能认为其他类别也有相同比例的变化。

3. 难以精确读取: 对于堆叠的中间部分,很难从图表中读取精确的数值,尤其是当多个类别颜色相似或者区域较小的时候。

4. 顺序敏感性: 类别的堆叠顺序可能会影响读图的难易程度,一般来说,底部的类别最容易读取,而上层的则较难。

在实际应用中,选择使用百分比堆叠线条图还是其他类型的图表应该基于数据的特点以及想要传达的信息。如果目标是展示多个类别随时间的相对变化,并且每个类别的总和固定,则百分比堆叠线条图是一个很好的选择。如果数据中的类别总和不是固定的,或者需要展示绝对值的变化,则可能需要选择其他类型的图表。

import matplotlib.pyplot as plt
import numpy as np

# Create sample data
categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4']
months = ['January', 'February', 'March', 'April', 'May', 'June']
data = np.array([
    [20, 30, 35, 35, 30, 25], # Category 1
    [25, 25, 25, 20, 20, 25], # Category 2
    [30, 25, 20, 25, 30, 30], # Category 3
    [25, 20, 20, 20, 20, 20]  # Category 4
])

# Normalize data to sum to 1 (100%)
data_perc = data / data.sum(axis=0)

# Plot stackplot
fig, ax = plt.subplots(figsize=(10, 6))
ax.stackplot(months, data_perc, labels=categories)

# Add legend
ax.legend(loc='upper left')

# Add titles and labels
ax.set_title('Percentage Stacked Line Bar Chart Example')
ax.set_ylabel('Percentage')
ax.set_xlabel('Month')

# Display the plot
plt.tight_layout()
plt.show()

 

为了对百分比堆叠线条图进行了美化,使用了一组更鲜明的颜色来区分不同的类别。在每个类别的边缘添加了更清晰的界限,添加了网格线以提高可读性,旋转了X轴标签,使它们更易读,增加了标题和轴标签的字体大小,并使标题加粗, 改进了图例的显示位置,并调整了字体大小,设置Y轴以显示百分比符号。如下所示

下面是使用MATLAB绘制的代码 

% Sample data for the four categories over six months
data = [
20 30 35 35 30 25; % Category 1
25 25 25 20 20 25; % Category 2
30 25 20 25 30 30; % Category 3
25 20 20 20 20 20 % Category 4
];

% Normalize the data to sum to 100%
data_perc = bsxfun(@rdivide, data, sum(data)) * 100;

% Create a vector to represent the months as numbers
months_num = 1:6;

% Plot the area
fig = figure;
ax = axes(fig);
stackedarea = area(ax, months_num, data_perc', 'LineStyle', 'none');

% Define the colors for each category
colors = lines(4); % Generate 4 distinct colors

% Apply the colors to the areas
for i = 1:length(stackedarea)
stackedarea(i).FaceColor = colors(i,:);
end

% Customize the axes and the plot
set(ax, 'XTick', months_num, 'XTickLabel', {'January', 'February', 'March', 'April', 'May', 'June'});
ylabel('Percentage');
title('Percentage Stacked Line Bar Chart Example');
legend({'Category 1', 'Category 2', 'Category 3', 'Category 4'}, 'Location', 'EastOutside');
grid on;

% Add Y-axis labels with percentage
yticks = get(ax, 'ytick');
new_labels = strcat(num2str(yticks'), '%');
set(ax, 'yticklabel', new_labels);

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript学习笔记、鸿蒙开发学习笔记

变量定义方式 # 变量声明 let msg: string douzi console.log(msg) let num: number 20 console.log(num) let end: boolean true console.log("end" end) let a: any 10 a douzi console.log(a) let p {name:"douzi",age:20} console.log(p.name)…

神经网络|张量tensor(待完善)

文章目录 tensor/张量什么是tensor?如何用代码实现tensortensor在神经网络中的应用 其他 tensor/张量 什么是tensor? 张量是用来探究一个点在各个切面(一共三个切面)和各个方向(x,y,z三个方向&…

AI语音机器人的发展

第一代AI语音机器人具体投入研发的开始时间不太清楚,只记得2017年的下半年就已经开始接触到成型的AI语音机器人,并且正式商用。语音识别效果还不多,大多都是接入的科大讯飞或者百度的ASR。 2018年算是AI语音机器人的“青春期”吧,…

LVS 负载均衡群集

本章展示: 了解群集的结构与工作模式 了解 LVS 负载均衡群集原理 学会配置 NFS 共享服务 学会构建 LVS-NAT 负载均衡群集 1.1 LVS 群集应用基础 群集的称呼来自于英文单词“Cluster”,表示一群、一串的意思,用在服务器领域则表 示大量服务…

Docker五部曲之二:Docker引擎

文章目录 前言Docker引擎镜像管理容器管理容器运行前台运行和后台运行容器识别重启策略清除 容器日志 数据管理卷挂载创建和管理卷启动带有卷的容器通过Docker Compose使用卷使用只读卷备份、恢复和迁移卷 绑定挂载用绑定挂载启动一个容器Docker Compose使用绑定挂载使用只读绑…

数据仓库研发规范

数据仓库研发规范 本文将介绍数据仓库研发规范的阶段规划、角色职责和整体流程。 在大数据时代,规范地进行数据资产管理已成为推动互联网、大数据、人工智能和实体经济深度融合的必要条件。贴近业务属性、兼顾研发各阶段要点的研发规范,可以切实提高研…

DCP文件传输的重要性与应用

在数字时代,文件传输已成为商业运作中不可或缺的一环。随着企业越来越多地采用云基础设施和服务,有效地在云和团队之间传输大文件和数据集变得至关重要。在这一背景下,数据复制协议(DCP)文件传输应运而生,引…

学习Vue封装的过渡与动画总结

今天学习了Vue封装的过渡与动画&#xff0c;接下来说一下Vue是如何实现的&#xff0c;首先原生的方法是在style元素中给指定元素添加过渡的过渡或动画&#xff0c;但Vue就不需要直接获取到需要过渡或动画的元素&#xff0c;而是使用一个<transition>的标签来包裹住想要过…

K8s:Pod生命周期

我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; pod创建过程 运行初始化容器&#xff08;init container&#xff09;过程 运行主容器&#xff08;main container&#xff09; 容器启动后钩子&#xff08;post st…

Netty开发弹幕系统

用Nettywebsocket实现简单的web弹幕系统 服务端代码 1. pom依赖 <!-- Netty --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.66.Final</version></dependency><!-- N…

基于opencv的指针式仪表的识别与读数

对于指针式仪表的识别与读数&#xff0c;可以通过以下步骤使用OpenCV实现&#xff1a; 读取图像&#xff1a;使用cv2.imread()函数读取要处理的仪表图像。 灰度转换&#xff1a;使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道&#xff0c;便…

Nginx负载均衡以及常用的7层协议和4层协议的介绍

一、引言 明人不说暗话&#xff0c;下面来解析一下 Nginx 的负载均衡。需要有 Linux 和 Nginx 环境哈。 二、nginx负载均衡的作用 高并发&#xff1a;负载均衡通过算法调整负载&#xff0c;尽力均匀的分配应用集群中各节点的工作量&#xff0c;以此提高应用集群的并发处理能力…

flutter在windows环境搭建

下载flutter https://flutter.cn/docs/development/tools/sdk/releases 下载相应的版本 我放在C盘下&#xff1a; 环境变量 再加系统变量&#xff1a; PUB_HOSTED_URLhttps://pub.flutter-io.cn 如图 FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 完成

[自动驾驶算法][从0开始轨迹预测]:一、坐标和坐标系变换

既然要从0开始轨迹预测&#xff0c;那从哪开始写起呢&#xff1f;回想下自己的学习历程&#xff0c;真正有挑战性的不是模型结构&#xff0c;不是繁琐的训练和调参&#xff0c;而是数据的制作&#xff01;&#xff01;&#xff01; 笔者自认为不是一个数学基础牢固的人&#xf…

Photoshop 2024 (PS2024) v25 直装版 支持win/mac版

Photoshop 2024 提供了多种创意工具&#xff0c;如画笔、铅笔、涂鸦和渐变等&#xff0c;用户可以通过这些工具来创建独特和令人印象深刻的设计效果。增强的云同步&#xff1a;通过 Adobe Creative Cloud&#xff0c;用户可以方便地将他们的工作从一个设备无缝同步到另一个设备…

Docker之数据卷的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之数据卷的使用》。&#x1f3af;&#x…

《GreenPlum系列》GreenPlum初级教程-03GreenPlum系统管理

文章目录 第三章 GreenPlum系统管理1.关于GreenPlum数据库发布版本号2.启动和停止GreenPlum数据库2.1 启动数据库2.2 重启数据库2.3 仅重新载入配置文件更改2.4 停止GreenPlum数据库2.5 停止客户端进程 3.GreenPlum数据库状态查询4.访问GreenPlum数据库4.1 数据库会话参数4.2 支…

基于STM32和ESP8266的物联网应用开发与实现

基于STM32和ESP8266的物联网应用开发与实现可以实现智能家居、智能工业、环境监测等多种应用&#xff0c;它将结合STM32微控制器的实时控制能力和ESP8266无线通信模块的WiFi连接能力。在本文中&#xff0c;我们将介绍如何设计和实现这样的物联网应用&#xff0c;并提供相关的代…

使用 Github、Hugo 搭建个人博客

Hugo 静态网站构建手册&#xff1a;https://jimmysong.io/hugo-handbook/ 关键字&#xff1a;开源 博客 框架 1、GitHub Pages 官网&#xff1a;https://pages.github.com/ 文档&#xff1a;https://docs.github.com/zh Github Pages 简介 Websites for you and your project…

java多线程(并发)夯实之路-线程池深入浅出

线程池 Thread Pool&#xff1a;线程池&#xff0c;存放可以重复使用的线程&#xff08;消费者&#xff09; Blocking Queue&#xff1a;阻塞队列&#xff0c;存放等待执行的任务&#xff08;生产者&#xff09; poll方法&#xff08;有时限地获取任务&#xff09;相对take注…