【数学建模美赛M奖速成系列】数据可视化方法(一)

数据可视化方法

  • 写在前面
  • 山脊图
    • 优点
    • 缺点
    • 实现
      • matlab
      • python
  • 气泡矩阵图
    • 实现
      • matlab
      • python
  • 后续

写在前面

最近开始更新一个新的系列科研绘图,在同一个竞赛下,大家都近乎相同的解题思路下。之所以能出现一等二等三等奖的区别很大部分都在于结果的可视化,为了能更好地帮助大家进行可视化,近期将专门推出一个可视化板块,推出各种好看实用的可视化图形。

山脊图

也称为Joy Plot。它是一种数据可视化的方法,用于展示一个或多个组的数据分布。在山脊图中,每个组的数据分布通过平滑的密度曲线表示,这些曲线沿垂直轴堆叠排列,从而产生类似山脊的视觉效果。这种图表尤其适用于比较不同组的数据分布情况。

山脊图的制作基于核密度估计(Kernel Density Estimation, KDE),这是一种估计概率密度函数的非参数方式。与传统的条形图或直方图相比,山脊图提供了一种更平滑、更直观的方式来展示数据的分布情况。它特别适合于展示大量组的数据分布,可以帮助观察者理解不同组之间的差异和相似之处。

山脊图(Ridge Plot)是一种数据可视化工具,主要用于比较多个分布。

优点

  1. 比较能力:非常适合比较多个分布的形状和大小。它能清晰地展示不同组之间的变化和趋势。
  2. 空间效率:通过在单个图中堆叠,山脊图可以有效地利用空间,显示多组数据,避免了创建多个单独的密度图。
  3. 美观性:山脊图在视觉上吸引人,可以用不同的颜色和样式来区分不同的组,使得数据更加生动和直观。
  4. 趋势识别:可以轻松识别多个群体数据中的共同模式和异常值。
  5. 数据量:适用于展示大量数据集,而不会显得拥挤或不清晰。

缺点

  1. 过度拥挤:如果组的数量过多,山脊图可能会显得拥挤,使得个别分布难以辨认。
  2. 精确度:由于重叠,难以精确读取特定点的值,尤其是在分布之间的重叠区域。
  3. 数值比较:虽然能够展示分布趋势,但不适合精确比较不同组之间的数值。
  4. 边缘效应:在堆叠的密度图中,可能会产生误导,例如,边缘的分布可能看起来比实际更少。

实现

本次更新主要以matlab为主,python实现代码也放于文末展示

matlab

首先是,绘制最初始的,最简单的山脊图,如下所示
在这里插入图片描述

% 清空环境变量和窗口
clear; close all;% 生成模拟数据
data = [];
groups = 6;
for i = 1:groups
data = [data; normrnd(i, 0.5, [200, 1])];
end% 为每组数据创建一个标签
group = repelem(1:groups, 200)';% 创建一个图形窗口
figure;% 对每组数据进行绘制
for i = 1:groups
% 选择当前组的数据
subset = data(group == i);
% 计算核密度估计
[f, xi] = ksdensity(subset);
% 绘制密度曲线,并上移相应的高度以创建堆叠效果
plot(xi, f + i, 'LineWidth', 2);
hold on;
end% 添加图例和坐标轴标签
legend('Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5', 'Group 6');
xlabel('Value');
ylabel('Density');
title('Ridge Plot Example');% 显示图形
hold off;

为了进一步美化图形,添加一些元素和调整一些参数来增强其视觉效果。

在这里插入图片描述

% 清空环境变量和窗口
clear; close all;% 生成模拟数据
data = [];
groups = 6;
colors = jet(groups); % 使用彩虹色系
for i = 1:groups
data = [data; normrnd(i, 0.5, [200, 1])];
end% 为每组数据创建一个标签
group = repelem(1:groups, 200)';% 创建一个图形窗口
figure;% 对每组数据进行绘制
for i = 1:groups
% 选择当前组的数据
subset = data(group == i);
% 计算核密度估计
[f, xi] = ksdensity(subset);
% 绘制密度曲线,并上移相应的高度以创建堆叠效果
plot(xi, f + i, 'LineWidth', 2, 'Color', colors(i, :));
hold on;
end% 添加图例和坐标轴标签
legend('Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5', 'Group 6', ...
'Location', 'northeastoutside');
xlabel('Value');
ylabel('Density');
title('Enhanced Ridge Plot Example');% 设置坐标轴界限和网格
xlim([min(data), max(data)]);
ylim([1, groups + 1]);
grid on;% 设置字体大小
set(gca, 'FontSize', 10);% 显示图形
hold off;

下面两个是matalb美化后的版本
在这里插入图片描述
在这里插入图片描述

python

在这里插入图片描述

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde# 如果您想尝试使用默认样式,可以注释掉下面这行代码
# plt.style.use('seaborn')# 生成模拟数据
groups = 6
data = pd.DataFrame({f'Group_{i}': np.random.normal(loc=i, scale=0.5, size=200) for i in range(1, groups + 1)})# 转换为“长格式”
data_long = pd.melt(data, var_name='Group', value_name='Value')# 初始化图形
fig, ax = plt.subplots(figsize=(10, 6))# 对每组数据进行绘制
for i, group in enumerate(data.columns):# 选择当前组的数据subset = data[group]# 计算核密度估计density = gaussian_kde(subset)xs = np.linspace(subset.min(), subset.max(), 200)ys = density(xs)# 绘制密度曲线,并上移相应的高度以创建堆叠效果ax.plot(xs, ys + i, lw=2)# 添加图例和坐标轴标签
ax.legend([f'Group {i + 1}' for i in range(groups)])
ax.set_xlabel('Value')
ax.set_ylabel('Density')
ax.set_title('Ridge Plot Example')# 显示图形
plt.show()

在这里插入图片描述

气泡矩阵图

气泡矩阵图(Bubble Matrix Plot),通常用于显示三个变量之间的关系。这种图表类型将数据点表示为气泡的形式,其中气泡的大小通常表示第三个数值变量的大小。图表的X轴和Y轴代表两个分类或定量变量。颜色可能代表另一个分类变量或是另一个连续变量的梯度,这里颜色的深浅对应于颜色条(Color Bar)上的值。
在这里插入图片描述

实现

matlab

在这里插入图片描述

% MATLAB code to create an aesthetic bubble matrix plot% Generate some example data
x_categories = 1:10;
y_categories = 1:10;
[X, Y] = meshgrid(x_categories, y_categories);
bubbleSizes = reshape(rand(size(X)), [], 1) * 100; % Random bubble sizes
colors = reshape(rand(size(X)), [], 1); % Random colors for the bubbles% Create the figure
figure;% Create the bubble plot using scatter
scatter(X(:), Y(:), bubbleSizes, colors, 'filled');% Improve aesthetics
colormap('jet'); % Use the 'jet' colormap for color coding the bubbles
colorbar; % Show a color bar
title('Aesthetic Bubble Matrix Plot');
xlabel('XAxis');
ylabel('YAxis');% Change the axis to show the category names
xticks(x_categories);
xticklabels(arrayfun(@num2str, x_categories, 'UniformOutput', false));
yticks(y_categories);
yticklabels(arrayfun(@num2str, y_categories, 'UniformOutput', false));% Add a grid
grid on;
set(gca, 'GridLineStyle', '--', 'GridColor', [0.5, 0.5, 0.5], 'GridAlpha', 0.7); % Use a gray color for the grid% There is no tight_layout in MATLAB, but you can manually adjust subplot margins or use 'axis tight'
% axis tight; % Uncomment this if you want to remove white space around the axes% Add a legend for the bubble sizes
lgd = legend('Bubble Sizes');
title(lgd, 'Legend');

为了进一步美化,我们使用了更现代的parula颜色映射,并为每个气泡添加了黑色的边缘,以便更好地与背景区分。同时,我对颜色条标签和标题的字体大小进行了调整,并设置了图例的位置和样式,使其更加美观。
在这里插入图片描述

python

import matplotlib.pyplot as plt
import numpy as np# Generate example data
x_categories = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10']
y_categories = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10']
x = np.repeat(range(len(x_categories)), len(y_categories))
y = np.tile(range(len(y_categories)), len(x_categories))
bubble_sizes = np.random.uniform(10, 1000, size=len(x)) # Bubble sizes
colors = np.random.uniform(0.1, 1, size=len(x)) # Color values# Create the bubble matrix plot
plt.figure(figsize=(10, 8))
scatter = plt.scatter(x, y, s=bubble_sizes, c=colors, cmap='viridis', alpha=0.6, edgecolors="w", linewidth=0.5)# Add titles and labels
plt.title('Bubble Matrix Plot Example')
plt.xlabel('XAxis')
plt.ylabel('YAxis')# Change the axis to show the category names
plt.xticks(ticks=np.arange(len(x_categories)), labels=x_categories)
plt.yticks(ticks=np.arange(len(y_categories)), labels=y_categories)# Add a color bar
plt.colorbar(scatter, label='Color Bar')# Add a legend for sizes
for size in [100, 300, 600]:plt.scatter([], [], c='k', alpha=0.3, s=size, label=str(size))
plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='Bubble Sizes')plt.grid(True)
plt.show()

为了进一步美化,我们使用了Spectral色彩映射来提供一个更丰富的颜色梯度。调整了标题和标签的字体大小,以提高可读性。修改了颜色条和图例,使其更具有信息性且易于阅读。添加了网格线,并调整了其样式以更加微妙且不干扰数据的展示。
在这里插入图片描述

后续

后续还会更新,百分比堆叠线条图、火山图、玫瑰图…有任何问题欢迎留言!需要完成的matlab和python代码看下面!

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

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

相关文章

Docker 容器之间的互相通信

Docker容器之间的互相通信 步骤一:创建自定义网络 首先,我们需要创建一个自定义网络,以便容器可以连接到这个网络上,从而实现互相通信。在命令行中执行以下命令: # 创建 docker network create ddz # 查看 docker n…

利用Socket动手实现简单HTTP协议

☆* o(≧▽≦)o *☆嗨~我是小奥🍹 📄📄📄个人博客:小奥的博客 📄📄📄CSDN:个人CSDN 📙📙📙Github:传送门 📅&a…

python 元组的详细用法

当前版本: Python 3.8.4 文章目录如下 1. 介绍元组 2. 定义元组 3. 访问元组 4. 查询元组 1. 介绍元组 元组(Tuple)是一个有序的、不可变的数据序列。它可以包含各种类型的数据,例如数字、字符串、列表等。元组使用圆括号()来…

Elasticsearch:聊天机器人教程(二)

这是继上一篇文章 “Elasticsearch:聊天机器人教程(一)”的续篇。本教程的这一部分讨论聊天机器人实现中最有趣的方面,以帮助你理解它并对其进行自定义。 数据摄入 在此应用程序中,所有示例文档的摄取都是通过 flask …

2024年信息安全不完全预测

不需要专家预言就能知道,计算机安全将在2024年出现在新闻中,而且可能不是什么好事。但2024年网络犯罪分子将如何试图突破防御并窃取有价值的数据,值得我们看一看安全专家们的看法和预测。 不需要专家预言就能知道,计算机安全将在…

【深度学习I-基础知识】

深度学习I-基础知识 1 基础知识1.1 模型的基本概念1.2 机器学习1.2.1 概率建模1.2.2 核方法1.2.3 决策树、随机森林和梯度提升机 1.3 深度学习1.3.1 张量1.3.2 数据批量1.3.3 张量运算1.3.4 训练过程 1 基础知识 1.1 模型的基本概念 模型是现实世界中一类具有泛化共性的真实系…

canvas截取视频图像(图文示例)

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

2023一带一路暨金砖国家技能发展与技术创新大赛“网络安全”赛项省选拔赛样题卷②

2023金砖国家职业技能竞赛"网络安全" 赛项省赛选拔赛样题 2023金砖国家职业技能竞赛 省赛选拔赛样题第一阶段:职业素养与理论技能项目1. 职业素养项目1. 职业素养项目2. 网络安全项目3. 安全运营 第二阶段:安全运营项目1. 操作系统安全配置与加…

Docker部署的gitlab升级指南(15.11.X容器里升级PostgreSQL到13.8)

一、确定当前版本 #进入当前版本容器产看gitlab版本 docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION#显示版本如下 14.4.0二、备份数据,防止升级发生意外 #执行备份命令 docker exec -ti gitlab gitlab-rake gitlab:backup:creat…

go的安装及配置

go的官方下载地址:All releases - The Go Programming Language​​​​​​ 1、找到对应的版本包下载,例如 wget https://golang.google.cn/dl/go1.21.6.linux-amd64.tar.gz 2、下载完成后配置解压Go源码包 tar -zxf go1.21.6.linux-amd64.tar.gz 3…

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读状态机定义状态转移图Mealy和Moore型状态机推荐写“新两段式状态机” 设计实战可乐机两种state的FSM(异步复位)4种状态的one-hot状态机4种状态的同步复位状态机蓄水池问题 参考链接 理论解读 状态机定义 状态机简写为 FSM(Fin…

Python3 索引下标及切片完全指南

介绍 Python 字符串数据类型是由一个或多个字符组成的序列,可以包含字母、数字、空格字符或符号。由于字符串是一个序列,我们可以通过索引和切片的方式访问它,就像访问其他基于序列的数据类型一样。 本教程将指导您通过索引访问字符串&…

网络攻击与检测防御:维护数字安全的关键挑战

随着数字化时代的深入,网络攻击已成为企业和个人面临的严峻挑战之一。本文将深入探讨不同类型的网络攻击,以及有效的检测和防御策略,以确保网络系统的安全性和稳定性。 1. 常见网络攻击类型: DDoS 攻击:分布式拒绝服…

IOC之Spring统一资源加载策略

前言 在学 Java的时候,我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实…

生成式对抗网络GAN

Generative Adversarial Nets由伊恩古德费洛(Ian J.Goodfellow)等人于2014年发表在Conference on Neural Information Processing Systems (NeurIPS)上。NeurIPS是机器学习和计算神经科学领域的顶级国际学术会议之一。 1. GAN在哪些领域大放异彩 图像生…

黑马苍穹外卖学习Day6

HttpClient 介绍 HttpClient 是 Apache 提供的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一种更简便的方式来执行 HTTP 请求,并支持多种协议,如 HTTP、HTTPS、FTP 等。 使用 HttpClient 可以方便地与远程…

MySQL体系结构

MySQL体系结构 MySQL采用的是客户/服务器体系结构,实际是有两个程序,一个是MySQL服务器程序,指的是mysqld程序,运行在存放数据库的机器上,负责在网络上监听并处理来自客户的服务请求,根据这些请求去访问数据…

边缘计算的挑战和机遇(结合RDH-EI)

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我…

Unity之物理系统

专栏的上一篇角色控制器控制角色移动跳崖,这一篇来说说Unity的物理系统。 本篇小编还要带大家做一个碰撞检测效果实例,先放效果图:流星撞击地面产生爆炸效果 一、Rigidbody 我们给胶囊添加了 Rigidbody 组件它才有的重力,我们来…

逸学Docker【java工程师基础】3.3Docker安装nacos

docker pull nacos/nacos-server docker network create nacos_network #创建容器网络 docker run -d \ --name nacos \ --privileged \ --cgroupns host \ --env JVM_XMX256m \ --env MODEstandalone \ --env JVM_XMS256m \ -p 8848:8848/tcp \ -p 9848:9848…