MATLAB | 绘图复刻(十二) | 桑基图+气泡图

hey 绘图复刻居然已经出到第十二期,破百指日可待hiahiahia,今天来复刻一下

  • Yu, W., Wang, Z., Yu, X. et al. Kir2.1-mediated membrane potential promotes nutrient acquisition and inflammation through regulation of nutrient transporters. Nat Commun 13, 3544 (2022).

这篇论文中的Fig. 1的i图,大概长这样:

这里我们随便生成了点数据效果大概长这样:

原论文可以在以下地址下载:

  • https://www.nature.com/articles/s41467-022-31149-y.pdf

本文用到了我以前写的文章中用到的工具,请将以下俩工具添加到路径或放在m文件所在文件夹内:

  • https://slandarer.blog.csdn.net/article/details/130430147
  • https://slandarer.blog.csdn.net/article/details/127719784

若是嫌麻烦可以直接移步文末去gitee仓库下载!!!!!!

若是嫌麻烦可以直接移步文末去gitee仓库下载!!!!!!

若是嫌麻烦可以直接移步文末去gitee仓库下载!!!!!!


1 桑基图

在左侧建立个axes并绘制桑基图。为了方便理解注释写的比较详细:

1.1 创建坐标区域部分代码

clc;clear;close all;rng(32)
% sankeyBubble
fig=figure('Name','sankey bubble','Units','normalized','Position',[.05,.05,.44,.85],'Color','w');ax1=axes('Parent',fig,'Position',[1/20,1/15,2.8/5-1/20,1-1.6/15]);
ax1.NextPlot='add';

1.2 随机生成数据部分代码

LSet='ABCDEFGH';
links={'','',''};
for i=1:length(LSet)tLinks=[compose([char(LSet(i)+32),'%d'],(1:5)'),...num2cell(char(LSet(i).*ones(5,1))),num2cell(rand(5,1).*10)];   links=[links;tLinks];
end
for i=1:6links=[links;[char('A'+32+randi([0,7],[1,1])),...num2str(randi([1,5],[1,1]))],...char('A'+randi([0,7],[1,1])),...num2cell(rand(1,1).*10)];
end
links(1,:)=[];

1.3 实际绘图代码

% 创建桑基图对象(Create a Sankey diagram object)
SK=SSankey(links(:,1),links(:,2),links(:,3));% 修改对齐方式(Set alignment)
% 'up'/'down'/'center'(default)
SK.Align='down';SK.Sep=.12;% 设置颜色(Set color)
SK.ColorList=[slanCM(134,40);slanCM(134,8)];% 修改链接颜色渲染方式(Set link color rendering method)
% 'left'/'right'/'interp'(default)/'map'/'simple'
SK.RenderingMethod='simple'; % 开始绘图(Start drawing)
SK.draw();for i=1:48SK.setLabel(i,'FontSize',12)
end

桑基图更详细的用法请去以下推送获取查看哇:

  • https://slandarer.blog.csdn.net/article/details/130430147

下面几个图都是我写的这个桑基图工具能实现的可以去瞅瞅~



而配色使用的是我写的slanCM工具包:

  • https://slandarer.blog.csdn.net/article/details/127719784


2 右侧axes创建

2.1 定位axes

因为我们是随机生成的数据,我们不知道右侧实际会有多宽,我们想要对齐就要获取一下数据范围,并计算一下右侧axes应该在的位置:

PatchSet=findobj(ax1,'Type','Patch');
Patch2Y=ones(0,4);
for i=length(PatchSet):-1:1if PatchSet(i).XData(1)==2Patch2Y=[Patch2Y;PatchSet(i).YData(:)'];end
end%% ========================================================================
% 构建右侧坐标区域并基础修饰
Patch2Lim=max(max(Patch2Y))-min(min(Patch2Y));
ax2=axes('Parent',fig,'Position',[2.8/5+1/80,1/15,1.5/5-1/20,Patch2Lim./diff(ax1.YLim).*(1-1.6/15)]);
ax2.YLim=[min(min(Patch2Y)),max(max(Patch2Y))];

2.2 右侧axes修饰

左侧我自己写的工具会自带修饰,因此只修饰右侧就好啦~

ax2.NextPlot='add';
ax2.Box='on';
ax2.YTick=[];
ax2.TickDir='out';
ax2.LineWidth=1;
ax2.FontName='Times New Roman';
ax2.FontSize=11;
ax2.YDir='reverse';
ax2.XLim=[-0.6,2.4];
ax2.XTick=-0.5:0.5:2;
ax2.XLabel.String='-Log(Pvalue)';
ax2.XLabel.FontSize=14;
ax2.XLabel.FontWeight='bold';tMap=slanCM(20,64);
colormap(tMap(33:end,:))


3 气泡图绘制

3.1 随机数据生成

% 随便编了点数据
NLogPvalue=linspace(2,-0.3,8);
PatchMeanY=(Patch2Y(:,2)+Patch2Y(:,3)).'./2;
Count=randi([1,8],[1,8]);
HitRatio=0.1+0.4.*rand([1,8]);

3.2 绘制气泡图并调整气泡大小

bubblechart(NLogPvalue,PatchMeanY,Count,HitRatio)
bubblesize([15,30])

3.3 绘制颜色条和图例

% 绘制颜色条
CMPHdl=colorbar;
CMPHdl.Position=[4.3/5,1/15+Patch2Lim./diff(ax1.YLim).*(1-1.6/15)./2,1/40,Patch2Lim./diff(ax1.YLim).*(1-1.6/15).*0.4];
text(ax2,ax2.XLim(2)+diff(ax2.XLim).*0.12,ax2.YLim(1)+diff(ax2.YLim).*0.05,'Hit Ratio',...'FontSize',14,'FontName','Times New Roman','FontWeight','bold')% 绘制图例
LGDHdl=bubblelegend;
LGDHdl.Position=[4.2/5,1/15,1/40,Patch2Lim./diff(ax1.YLim).*(1-1.6/15).*0.4];
LGDHdl.Box='off';
text(ax2,ax2.XLim(2)+diff(ax2.XLim).*0.12,ax2.YLim(1)+diff(ax2.YLim).*0.65,'Count',...'FontSize',14,'FontName','Times New Roman','FontWeight','bold')


4 完整代码

clc;clear;close all;rng(32)
% sankeyBubble
fig=figure('Name','sankey bubble','Units','normalized','Position',[.05,.05,.44,.85],'Color','w');ax1=axes('Parent',fig,'Position',[1/20,1/15,2.8/5-1/20,1-1.6/15]);
ax1.NextPlot='add';LSet='ABCDEFGH';
links={'','',''};
for i=1:length(LSet)tLinks=[compose([char(LSet(i)+32),'%d'],(1:5)'),...num2cell(char(LSet(i).*ones(5,1))),num2cell(rand(5,1).*10)];   links=[links;tLinks];
end
for i=1:6links=[links;[char('A'+32+randi([0,7],[1,1])),...num2str(randi([1,5],[1,1]))],...char('A'+randi([0,7],[1,1])),...num2cell(rand(1,1).*10)];
end
links(1,:)=[];% 创建桑基图对象(Create a Sankey diagram object)
SK=SSankey(links(:,1),links(:,2),links(:,3));% 修改对齐方式(Set alignment)
% 'up'/'down'/'center'(default)
SK.Align='down';SK.Sep=.12;% 设置颜色(Set color)
SK.ColorList=[slanCM(134,40);slanCM(134,8)];% 修改链接颜色渲染方式(Set link color rendering method)
% 'left'/'right'/'interp'(default)/'map'/'simple'
SK.RenderingMethod='simple'; % 开始绘图(Start drawing)
SK.draw();for i=1:48SK.setLabel(i,'FontSize',12)
endPatchSet=findobj(ax1,'Type','Patch');
Patch2Y=ones(0,4);
for i=length(PatchSet):-1:1if PatchSet(i).XData(1)==2Patch2Y=[Patch2Y;PatchSet(i).YData(:)'];end
end%% ========================================================================
% 构建右侧坐标区域并基础修饰
Patch2Lim=max(max(Patch2Y))-min(min(Patch2Y));
ax2=axes('Parent',fig,'Position',[2.8/5+1/80,1/15,1.5/5-1/20,Patch2Lim./diff(ax1.YLim).*(1-1.6/15)]);
ax2.YLim=[min(min(Patch2Y)),max(max(Patch2Y))];
ax2.NextPlot='add';
ax2.Box='on';
ax2.YTick=[];
ax2.TickDir='out';
ax2.LineWidth=1;
ax2.FontName='Times New Roman';
ax2.FontSize=11;
ax2.YDir='reverse';
ax2.XLim=[-0.6,2.4];
ax2.XTick=-0.5:0.5:2;
ax2.XLabel.String='-Log(Pvalue)';
ax2.XLabel.FontSize=14;
ax2.XLabel.FontWeight='bold';tMap=slanCM(20,64);
colormap(tMap(33:end,:))% 随便编了点数据
NLogPvalue=linspace(2,-0.3,8);
PatchMeanY=(Patch2Y(:,2)+Patch2Y(:,3)).'./2;
Count=randi([1,8],[1,8]);
HitRatio=0.1+0.4.*rand([1,8]);bubblechart(NLogPvalue,PatchMeanY,Count,HitRatio)
bubblesize([15,30])% 绘制颜色条
CMPHdl=colorbar;
CMPHdl.Position=[4.3/5,1/15+Patch2Lim./diff(ax1.YLim).*(1-1.6/15)./2,1/40,Patch2Lim./diff(ax1.YLim).*(1-1.6/15).*0.4];
text(ax2,ax2.XLim(2)+diff(ax2.XLim).*0.12,ax2.YLim(1)+diff(ax2.YLim).*0.05,'Hit Ratio',...'FontSize',14,'FontName','Times New Roman','FontWeight','bold')% 绘制图例
LGDHdl=bubblelegend;
LGDHdl.Position=[4.2/5,1/15,1/40,Patch2Lim./diff(ax1.YLim).*(1-1.6/15).*0.4];
LGDHdl.Box='off';
text(ax2,ax2.XLim(2)+diff(ax2.XLim).*0.12,ax2.YLim(1)+diff(ax2.YLim).*0.65,'Count',...'FontSize',14,'FontName','Times New Roman','FontWeight','bold')

以上已经是本文全部内容,需要用到两个我自己写的工具包,若懒得一一获取代码,可以去以下gitee仓库获取全部代码:

https://gitee.com/slandarer/PLTreprint/

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

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

相关文章

浅谈Oauth2.0授权

一、背景 近期公司准备上身份认证平台(IAM),主要有两块内容,一部分是单点登录、一部分是账号生命周期管理。其中涉及几个常用的单点登录标准认证协议,其中有SMAL、LOAP、CAS、OIDC、Oauth2.0,本篇文章对Oau…

java授权码方案 软件实现时间授权 离线授权 夏末版

java项目在离线状态下部署到客户端,很容易被反编译,授权容易被破解, 给项目盈利带来很大的困难, 特别是小项目很容易失败, 小项目特别需要完善可靠的授权加密解决方案 本方案只需要集成一个jar包就可以实现在关键节点完成,授权验证,离线时间验证等功能,特别是个中小项目的开发…

如何评估大型语言模型

01 对大型语言模型(LLM)的 主客观评估 在评估大型语言模型时,我们可以进行客观评估和主观评估。 主观评估的方法是用户亲自尝试不同的模型,提出一些问题,然后根据自己的感受来判断哪个模型好,哪个模型不好。…

github一些有趣的使用场景和基本使用方法

文章目录 github的使用入门安装 Git创建 GitHub 帐户在本地设置 Git克隆仓库进行修改和提交推送更改拉取更新 删除Github上废弃的仓库注意 github更多有趣的使用场景协作和社交编程文档和知识库学习和教育自动化工作流程数据科学和可视化用来写blogGitHub PagesJekyllHexo第三方…

App自动化测试持续集成效率提高50%

持续集成是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态,让产品…

Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

CPU/堆/类/线程 根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等…

leetcode427. 建立四叉树(java)

建立四叉树 题目描述递归代码演示 题目描述 难度 - 中等 leetcode - 427. 建立四叉树 给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。 你需要返回能表示矩阵 grid 的 四叉树 的根结点。 四叉树数据结构中,每个内部节…

Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)

目录 Redis 三种特殊的数据类型: Geospatial:地理位置 Geospatial类型常用的命令: GEOADD:添加地理位置 GEOPOS:获取地理位置 GEODIST:返回两个给定位置之间的距离 GEORADIUS:以给定的经纬…

Linux —— 信号阻塞

目录 一,信号内核表示 sigset_t sigprocmask sigpending 二,捕捉信号 sigaction 三,可重入函数 四,volatile 五,SIGCHLD 信号常见概念 实际执行信号的处理动作,称为信号递达Delivery;信…

【实例项目:基于多设计模式下的日志系统(同步异步)】

本项目涉及的到所有源码见以下链接: https://gitee.com/ace-zhe/wz_log 一、项目简介 1.日志的概念(白话版) 日志类似于日记,通常是指对完成某件事情的过程中状态等的记录,而计算机中的日志是指日志数据&#xff0c…

centos编译升级cmake,痛苦的Linux小白

环境 root 用户 下载 cmake官网下载地址:https://cmake.org/download/ 获取下载地址,右击cmake-3.27.4.tar.gz 命令行输入链接地址,下载 wget https://github.com/Kitware/CMake/releases/download/v3.27.4/cmake-3.27.4.tar.gz解压 tar -zx…

Docker基础-cgroup

cgroup cgroup什么是 cgroups为什么使用 cgroupscgroups 的用途cgroups 可以控制的子系统基础命令pidstatstress cgroup试验cgroups 信息查看cgroups 版本查看cgroups 子系统查看cgroups 挂载信息查看查看一个进程上的 cgroup 限制 使用 cgroups 对内存进行控制使用 cgroups 对…