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

百分比堆叠线条图是一种数据可视化工具,它结合了堆叠面积图和线条图的特点。在这种图表中,时间序列数据被分成几个部分,每个部分代表一个类别,所有类别的值加起来总和为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);

 

 

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

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

相关文章

软件测试|selenium 元素无此属性NoSuchAttributeException问题分析与解决

简介 在使用Selenium进行Web自动化测试时,我们可能会遇到NoSuchAttributeException异常。这个异常通常在尝试访问一个元素的属性(attribute)时抛出,但该属性不存在。本文将介绍NoSuchAttributeException异常的常见原因以及解决方…

使用Web自动化测试工具显著好处

随着互联网技术的飞速发展,Web应用程序在企业中的重要性不断上升。为了确保Web应用程序的质量和稳定性,许多企业转向了Web自动化测试工具。下面是使用Web自动化测试工具的一些显著好处: 1. 提高测试覆盖率 Web自动化测试工具可以模拟用户与We…

[redis] redis高可用之持久化

一、Redis 高可用的相关知识 1.1 什么是高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,…

软件测试公式之如何高质量的做BUG分析?

对于BUG分析,测试人员再熟悉不过了。但如果是面对大量的BUG,要如何有效的分析呢?有什么好的方案和行动项?今天聊聊这个话题。 01 BUG分析简单可以分为两类:宏观BUG分析 和 微观BUG分析。 宏观BUG分析:在…

Rust-变量

Rust的变量必须先声明后使用。对于局部变量,最常见的声明语法为: let variable:i32 100;与传统的C/C语言相比,Rust的变量声明语法不同。这样设计主要有以下几个方面的考虑。 语法分析更容易 从语法分析的角度来说,Rust的变量声明…

[element-ui] 级联选择器el-cascader不触发change事件

el-cascader 使用官网的数据是可以的 官网数据中最后一级没有children // 删除最后一级的children changeKey(arr) {for (var i0; i<arr.length; i) {if (arr[i].children.length) {this.changeKey(arr[i].children)} else {delete arr[i].children}} ]就可以了 参考&…

JavaScript高级程序设计读书记录(十二):函数

函数是ECMAScript中最有意思的部分之一&#xff0c;这主要是因为函数实际上是对象。每个函数都是Function 类型的实例&#xff0c;而 Function 也有属性和方法&#xff0c;跟其他引用类型一样。因为函数是对象&#xff0c;所以函数名就是 指向函数对象的指针&#xff0c;而且不…

蓝凌EIS智慧协同平台 frm_form_upload.aspx 文件上传漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 蓝凌EIS智慧协同平台 frm_form_upload.aspx接口处存在任意文件上传漏洞,未经过身份认证…

李沐之使用块的网络VGG

目录 1.VGG 2.代码实现 1.VGG n层是指可以有N个窗口3*3&#xff0c;填充为1的卷积层。有m个通道&#xff0c;这里输入和输出都是一样的。 VGG就是替换掉AlexNet整个卷积层的架构。 直径大小表示占内存&#xff0c;横坐标表示速度&#xff0c;纵坐标表示精确度。 2.代码实现 …

搭建算法日志自检小系统

&#x1f952; 前言 目前演示的是一个工具&#xff0c;但如此&#xff0c;未来完成有潜力可以演变为一整套系统。 &#x1f451;现场人员自检失败表计点位教程V2.0 NOTE: 如果没有“logfiles-meter-tool“目录的请联系我们进行提供&#xff01; &#x1f447; 进入<dist>…

构建基于RHEL7(CentOS7)的OpenSSH9.5p1的RPM包和升级回退方案

本文适用&#xff1a;RHEL7系列&#xff0c;或同类系统(CentOS7等) 文档形成时期&#xff1a;2023年 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目录 环境准备安装依赖openssh-9.5p1-el7.spec内容构建RPM包下载安装前注意事项开启t…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…