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

news2024/12/24 9:13:27

数据可视化方法

  • 写在前面
  • 山脊图
    • 优点
    • 缺点
    • 实现
      • 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.coloradmin.cn/o/1394224.html

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

相关文章

【总结】Linux命令中文帮助手册

1. 为什么要总结Linux命令中文帮助手册 Linux 官方并不提供中文的 help、man 帮助手册。网络上已有的前人翻译过的中文手册版本比较老,且翻译存在误差。从记忆角度来看,Linux 很多命令都不一定记得住详细的用法,易遗忘,缺少经验总…

计算机系统基础知识揭秘:硬件、处理器和校验码

计算机系统基础知识揭秘:硬件、处理器和校验码 一、计算机系统基础知识的重要性二、计算机系统硬件2.1、内存和存储设备2.2、输入输出设备 三、中央处理器(CPU)3.1、运算器3.2、控制器3.3、寄存器组3.4、多核CPU 四、数据表示4.1、原码、反码…

一文极速了解【自注意力机制】

当下如火如荼的大模型,其中的关键技术就是注意力机制(Attention),于2015年提出。2017年的“Attention is all you need”一文提出了Transformer模型,去掉RNN,只保留注意力,性能吊打所有机器翻译…

Android Studi安卓读写NDEF智能海报源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.1f60789ey1EsPH <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmln…

Intel杀回车载计算领域,极氪首发其第一代AI SoC

作者 |德新 编辑 |王博 Intel低调地重新杀回车载计算领域。 在两个月前&#xff0c;在上海举办的进博会上&#xff0c;Intel对外展示了基于新一代酷睿核心打造的智能座舱平台。 在此之前&#xff0c;这家芯片巨头任命了服役公司20多年的老将Jack Weast作为汽车业务的全球负责…

Zookeeper启动报错常见问题以及常用zk命令

Zk常规启动的命令如下 sh bin/zkServer.sh start 启动过程如果存在失败&#xff0c;是没办法直接看出什么问题&#xff0c;只会报出来 Starting zookeeper … FAILED TO START 可以用如下命令启动&#xff0c;便于查看zk启动过程中的详细错误 sh bin/zkServer.sh start-for…

深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

文章目录 1多维数组压缩维度扩充维度 2numpy类型转换深度学习常见的float32类型。 3数组扁平化4np.where()的用法5np.argmax()6图像拼接7生成同shape的图片&#xff0c;指定数据类型 1多维数组 a.shape(3,2);既数组h3&#xff0c;w2 a.shape(2,3,2);这里第一个2表示axis0维度上…

《30天自制操作系统》学习笔记(七)

先体验一下编译仿真方法&#xff1a; 30天自制操作系统光盘代码在下面链接&#xff0c;但是没有编译仿真工具&#xff1a; https://gitee.com/zhanfei3000/30dayMakeOS 仿真工具在下面链接&#xff1a; https://gitee.com/909854136/nask-code-ide 这是一个集成的编译仿真工…

综述:自动驾驶中的 4D 毫米波雷达

论文链接&#xff1a;《4D Millimeter-Wave Radar in Autonomous Driving: A Survey》 摘要 4D 毫米波 (mmWave) 雷达能够测量目标的距离、方位角、仰角和速度&#xff0c;引起了自动驾驶领域的极大兴趣。这归因于其在极端环境下的稳健性以及出色的速度和高度测量能力。 然而…

Xshell无法ssh连接虚拟机问题或主机无法ping通虚拟机。

常见报错如下&#xff1a; 1&#xff0c;Could not connect to ‘&#xff1f;&#xff1f;&#xff1f;’ (port 22): Connection failed. 2&#xff0c;卡在To escape to local shell, press ‘CtrlAlt]’. 3&#xff0c;Connection closing…Socket close. Connection clos…

Apache安全及优化

配置第一台虚拟机 VM1网卡 yum仓库 挂载磁盘 上传3个软件包到/目录 到/目录下进行解压缩 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar -xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.29/srclib/apr mv apr-util-1.6…

jetson-inference入门

jetson-inference 文章目录 jetson-inference前言一、jetson-inference二、 下载传输三、 docker的安装使用总结 前言 jetson 部署相关内容 一、jetson-inference 官方推出的体验套餐&#xff0c;提供了三种最常见的AI应用与计算机视觉的类型 图像辨识&#xff08;Image Rec…

纯CSS3的单选框、复选框、开关按钮UI库-自由分享jQuery、html5、css3的插件库

纯CSS3的单选框、复选框、开关按钮UI库-自由分享jQuery、html5、css3的插件库-遇见你与你分享

陪玩系统:最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码

首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码 &#xff08;价值29800&#xff09;最新陪玩3.0独立版本 &#xff0c;文件截图 结尾将会附上此系统源码以及详细搭建教程包含素材图仅用于学习使用 陪玩系统3.0独立升级版正式发布&#xff0c;此版本…

Elasticsearch各种高级文档操作2

本文来记录下Elasticsearch各种文档操作 文章目录 初始化文档数据 初始化文档数据 在进行各种文档操作之前&#xff0c;我们先进行初始化文档数据的工作

Pixels:重新定义游戏体验的区块链农场游戏

数据源&#xff1a;Pixels Dashboard 作者&#xff1a;lesleyfootprint.network 最近&#xff0c;Pixels 通过从 Polygon 转移到 Sky Mavis 旗下的 Ronin 网络&#xff0c;完成了一次战略性的转变。 Pixels 每日交易量 Pixels 在 Ronin 网络上的受欢迎程度急剧上升&#xf…

Linux的权限(2)

目录 Linux的&#xff08;事物属性&#xff09;文件权限 文件权限值得表示方法 字符表示方法 8进制表示方法 文件访问权限得相关设置方法 chmod修改权限法1 chmod修改权限法2 文件的角色&#xff08;拥有者/所属者&#xff09;修改 chown拥有者 chgrp所属者 &…

贵阳贵安推进“数字活市”战略成效明显

作者&#xff1a;黄玉叶 近年来&#xff0c;贵阳贵安将数字经济确立为高质量发展的主路径之一&#xff0c;把推进“数字活市”作为实施主战略、实现主定位&#xff0c;特别是建设“数字经济发展创新区核心区”的重要抓手&#xff0c;从改革、发展、民生三个维度纵深推进“数字活…

享元模式介绍

目录 一、享元模式介绍 1.1 享元模式定义 1.2 享元模式原理 1.2.1 享元模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、享元模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 类图 2.2.2 具体实现 2.2.2.1 抽象享元类 2.2.2.2 共享享元类-白色棋子 2.2.2.3 共享享元…

2018年认证杯SPSSPRO杯数学建模A题(第一阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 探究海豚猎捕时沙丁鱼群的躲避运动模型 A题 海豚与沙丁鱼 原题再现&#xff1a; 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗&#xff0c;所以在距离较远时&#xff0c;海豚只能使用回声定位方法来判断鱼群的整体位置&#xf…