MATLAB | 绘图复刻(十) | 旋转45度的相关系数热图绘制

news2024/11/24 2:01:29

我们在论文里经常能见到这样三角形的相关性热图,这样的热图绘制出来会更节省空间:

这期就教大家如何绘制三角形的热图,绘制效果如下:

以下是教程部分:


0 数据准备

这里随便生成了一组数据,计算了相关系数,同时给出了各个变量名:

% 随机生成数据
X=randn(20,20)+[(linspace(-1,2.5,20)').*ones(1,8),(linspace(.5,-.7,20)').*ones(1,5),(linspace(.9,-.2,20)').*ones(1,7)];
Data=corr(X1);
% 变量名列表
NameList=compose('Sl-%d',1:20);

1 坐标区域创建及热图绘制

% 图窗及坐标区域
treeFig=figure('Position',[100,300,1000,600]);
ax=axes(treeFig);
ax.NextPlot='add';
ax.DataAspectRatio=[1,1,1];
ax.XColor='none';
ax.YColor='none';

% 热图绘制
sqX=[-1,0,1,0];
sqY=[0,1,0,-1];
for i=1:size(Data,1)
    for j=i:size(Data,1)
        fill(ax,sqX+(i-1)+(j-1),sqY-(i-1)+(j-1),Data(i,j),'EdgeColor','none')
    end
end
axis(ax,'tight')

2 调整配色并创建colorbar

比如说winter配色:

% 设置颜色并绘制colorbar
clim(ax,[-1,1])
colormap(ax,'winter')
cbHdl=colorbar(ax);
cbHdl.Location='southoutside';
cbHdl.FontName='Times New Roman';
cbHdl.FontSize=12;

想要更丰富配色可以使用slanCM工具:
https://slandarer.blog.csdn.net/article/details/127719784

例如:

colormap(ax,slanCM(98))

3 添加文本

想要下面文本就下面文本附近if后改为true,想要右上方文本同理:

% 下方注释
if true
for i=1:size(Data,1)
    text(ax,-1/2+2*(i-1),-1/2,NameList{i}+" ",'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','right','Rotation',45)
end
end

% 右上方注释
if true
for i=1:size(Data,1)
    text(ax,-1/2+(i-1)+size(Data,1),-1/2+size(Data,1)-(i-1)," "+NameList{i},'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','left','Rotation',45)
end
end

4 树状图

此部分需要下载Statistics and Machine Learning Toolbox工具箱:

由于树状图需要把矩阵重新排列,因此单独写段代码:

% Rotation 45-degree corr heatmap
% 随机生成数据
X=randn(20,20)+[(linspace(-1,2.5,20)').*ones(1,8),(linspace(.5,-.7,20)').*ones(1,5),(linspace(.9,-.2,20)').*ones(1,7)];
Data=corr(X);
% 变量名列表
NameList=compose('Sl-%d',1:20);

% 图窗及坐标区域
treeFig=figure('Position',[100,300,1000,600]);
ax=axes(treeFig);
ax.NextPlot='add';
ax.DataAspectRatio=[1,1,1];
ax.XColor='none';
ax.YColor='none';

% 获取树状图数据
fig1=figure();
tree1=linkage(Data,'average');
[~,~,order1]=dendrogram(tree1,0,'Orientation','top');
Data=Data(order1,order1);
NameList=NameList(order1);
LineSet1=fig1.Children.Children;
maxY1=0;
for i=1:length(LineSet1)
    maxY1=max(max(LineSet1(i).YData),maxY1);
end
for i=1:length(LineSet1)
    LineSet1(i).YData=LineSet1(i).YData./maxY1.*size(Data,1)./3;
end
for i=1:length(LineSet1)
    tX=(LineSet1(i).XData-1).*sqrt(2);
    tY=LineSet1(i).YData;
    nX=tX.*cos(pi/4)-tY.*sin(pi/4);
    nY=tX.*sin(pi/4)+tY.*cos(pi/4);
    plot(ax,nX,nY,'Color','k','LineWidth',1);
end
delete(fig1)

% 热图绘制
sqX=[-1,0,1,0];
sqY=[0,1,0,-1];
for i=1:size(Data,1)
    for j=i:size(Data,1)
        fill(ax,sqX+(i-1)+(j-1),sqY-(i-1)+(j-1),Data(i,j),'EdgeColor','none')
    end
end
axis(ax,'tight')

% 设置颜色并绘制colorbar
clim(ax,[-1,1])
colormap(ax,'winter')

cbHdl=colorbar(ax);
cbHdl.Location='southoutside';
cbHdl.FontName='Times New Roman';
cbHdl.FontSize=12;
colormap(ax,slanCM(100))

for i=1:size(Data,1)
    text(ax,-1/2+(i-1)+size(Data,1),-1/2+size(Data,1)-(i-1)," "+NameList{i},'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','left','Rotation',45)
end

展示一下使用slanCM后的其他配色:

97号配色

100号配色

106号配色

110号配色

111号配色

136号配色

141号配色

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

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

相关文章

C++——vector迭代器失效与深浅拷贝问题

目录 1. vector迭代器失效问题 1.1 insert迭代器失效 1.1.1 扩容导致野指针 1.1.2 意义变了 1.1.3 官方库windows下VS和Linux下对insert迭代器失效的处理 1.2 erase迭代器失效 1.2.1 失效原因分析 1.2.2 官方库windows下VS和Linux下对erase迭代器失效的处理 1.2.3 测试…

0基础学习VR全景平台篇第46篇:底部菜单- 【开场地图】与【高清矩阵】的对比

大家好,欢迎观看蛙色VR官方——后台使用系列课程! 这期 ,我们将为大家讲解蛙色VR平台-【开场地图】与【高清矩阵】功能的区别 功能位置示意 一、功能具体应用 开场地图分为两种,分别是高德地图和手绘地图。 高德地图点位目前系统…

【Linux】MySQL 存储引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MySQL 存储引擎 MyISAM 表支持 3 种不同的存储格式常用存储引擎:InnoDB、MyISAM查看系统支持的存储引擎查看表使用的存储引擎修改存储引擎死锁如何尽可能避免死锁…

每日学术速递6.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.The ObjectFolder Benchmark: Multisensory Learning with Neural and Real Objects(CVPR 2023) 标题:ObjectFolder 基准测试:使用神经和真实对象进行多感官…

计算机网络管理- SNMP协议报文和报文格式分析,SNMP PDU分析

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

【玩转Linux操作】Linux服务管理

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔服务(service)管理⭐service管理指令 &…

《网络安全0-100》网络安全技术

网络安全技术 防火墙 入侵检测系统 防火墙(Firewall)是一种网络安全设备,用于监控和控制网络流量,以保护网络免受未经授权的访问和攻击。防火墙通过过滤网络流量,阻止潜在的攻击流量进入网络。它可以实现基于端口、协议、IP地址和应用程序的…

chatgpt赋能python:Python指定日期的后一天:介绍与解析

Python指定日期的后一天:介绍与解析 Python是广泛使用的编程语言之一,在数据科学、机器学习、人工智能和网络开发等众多领域都有重要的应用。本文将要讨论的问题是:如何使用Python来获取一个指定日期的后一天?这个问题看似简单&a…

QT找不到python27.dll或python36.dll解决办法

缺少python27.dll 点开QT时出现上述问题,一种方法就是找python27.dll文件进行替换。 1.进入网站下载相关文件 windll.com/dll/python-… 2.之后将文件移动到下面的路径里,C:\Windows\SysWOW64\ 3.然后重启 试了4种方案,把32位放在System32…

【操作系统】哲学界进餐问题实现

目录 实验原理: 实验目的: 实验数据及结果分析: 实验原理: 哲学家进餐问题可以通过限制同时进餐人数为4解决,为此需要设置一个值为4的互斥信号量sem_eaters,并且每根筷子只能同时由一个人使用,需要设置…

kafka的初步认识

什么是Kafka? Kafka的增长很快。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,等等。LinkedIn,微软(Micro…

【CV 向】如何打造一个“数串串神器“

导言 最近,我看到了这样一个视频,觉得很有意思,就随手保存下来了。😁😁😁 之前吃串串火锅,老板数竹签不是称重就是用手慢慢数,但是称重似乎总是得不到正确的竹签数目,而…

C++技能系列 ( 7 ) - 右值引用、移动语意、完美转发

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 右值引用、移动语意、完美转发 1、右值引用2、完美转发 1、右值引用 右值引用(rvalue refe…

Redux的纯函数、中间件

当我们的应用随着业务的发展,变得越来越复杂的时候,组件之间的状态也是越来越复杂。 reducer函数 之前说过redux中的action,是用来描述一种变化。但是完成变化并且生辰新的数据数据状态的是reducer方法。 reducer方法,必须是纯…

SQL注入攻击与防护

目录 一、SQL注入攻击概述 1.1 SQL注入概念 1.1.1 标准查询过程 1.1.2 SQL注入定义 1.2 SQL注入根本原因 1.3 SQL注入条件 1.4 SQL注入防范 1.4.1 根本原因:过滤不严 1.4.2 安全设计原则:数据与代码分离 1.5 SQL注入流程 1.6 SQL注入分类 1.…

vue3+vite+ts项目配置开发环境和生产环境 打包命令配置

开发环境和生产环境的配置和打包方式有所不同,下面是基于vue3vitets项目的开发环境和生产环境配置及打包方式的详细说明。 开发环境配置 开发环境的配置主要是为了方便开发者进行调试和测试,以下是开发环境的配置步骤: 1.1 安装依赖 首先…

DAY27:回溯算法(二)组合问题及其优化

文章目录 77.组合(一定要注意逻辑问题)思路for循环嵌套的情况回溯算法模拟for循环K层嵌套 回溯法步骤伪代码完整版debug测试逻辑问题:没有输出逻辑问题:为什么是递归传入i1而不是startIndex1?重要:为什么会…

Java-API简析_java.lang.CharSequence接口(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131318474 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

Unreal 5 实现场景

如果你拿到了一个新的场景,想将此场景应用到游戏当中,首先需要给敌人增加ai移动路径,需要添加导航体积 添加导航模型包围体积 添加了体积以后,设置包围盒的大小,将敌人可以行进的区域给区分出来,然后按键盘…

PyCharm2023开发工具activice教程(包含工具link)

PyCharm2023 前言1. 下载工具2. 选择安装方法33. 填入active code4. 效果如下 前言 PyCharm是一款由JetBrains开发的强大的Python集成开发环境(IDE)。它提供了丰富的功能和工具,旨在提高Python开发者的生产力和效率。 以下是PyCharm的一些主…