Single-cell profiling of vascular endothelial cells reveals progressive organ-specific vulnerabilities during obesity
https://www.nature.com/articles/s42255-022-00674-x#Sec58
s42255-022-00674-x.pdf
https://github.com/Osynchronika/sc_EC_obesity_atlas
大部分 作图的数据都有,可以试着用论文中提供的数据复现一下论文中的图
今天的推文我们复现一下论文中的figure4f

之前的推文也介绍过这种形式的饼图,可以也看看之前的推文
今天的这个图上下两层分开做,然后采用拼图的方式实现
饼图上展示比例的文本如何添加的精确的位置我暂时想不到比较好的方法了,推文里的解决办法是构造大体的坐标,然后出图后手动调节
论文中提供的数据

第一层饼图的数据整理成如下格式

library(ggplot2)
library(scatterpie)
library(readxl)
library(tidyverse)
fig4f.df01<-read_excel("data/20230207/figure4f.xlsx",
sheet = "Sheet1")
fig4f.df01
ggplot()+
geom_scatterpie(data=fig4f.df01,
aes(x,y,group=region,r=0.4),
cols = c("A","B"))+
coord_equal()
fig4f.df01
fig4f.df01 %>%
rowwise() %>%
mutate(A_prop=paste0(round(A/(A+B),2)*100,"%"),
B_prop=paste0(round(B/(A+B),2)*100,"%"),
x_A=x+0.1,
x_B=x-0.1,
y_A=y,y_B=y) -> fig4f.df01.1
ggplot()+
geom_scatterpie(data=fig4f.df01.1,
aes(x,y,group=region,r=0.4),
cols = c("A","B"))+
coord_equal()+
geom_text(data=fig4f.df01.1,
aes(x=x_A,y=y_A,label=A_prop),
hjust=0,color="black")+
geom_text(data=fig4f.df01.1,
aes(x=x_B,y=y_B,label=B_prop),
hjust=1,color="white")+
theme_void()+
theme(axis.title.y = element_text(angle = 90),
legend.title = element_blank())+
scale_fill_manual(values = c("A"="#89bd41","B"="#e20613"),
labels=c("A"="Obesity: up\nRev: restored",
"B"="Obesity: up\nRev: not restored"))+
labs(y="Upregulated")+
geom_text(data = data.frame(x=1:7,y=1.5,label=c("Brain","Heart","Lungs",
"Kidneys","Liver","Vis AT","Sc AT")),
aes(x=x,y=y,label=label),
fontface="bold")

作图数据手动整理成如下格式

作图代码
fig4f.df02<-read_excel("data/20230207/figure4f.xlsx",
sheet = "Sheet2")
fig4f.df02
fig4f.df02
fig4f.df02 %>%
rowwise() %>%
mutate(A_prop=paste0(round(A/(A+B),2)*100,"%"),
B_prop=paste0(round(B/(A+B),2)*100,"%"),
x_A=x+0.1,
x_B=x-0.1,
y_A=y,y_B=y) -> fig4f.df02.1
ggplot()+
geom_scatterpie(data=fig4f.df02.1,
aes(x,y,group=region,r=0.4),
cols = c("A","B"))+
coord_equal()+
geom_text(data=fig4f.df02.1,
aes(x=x_A,y=y_A,label=A_prop),
hjust=0,color="white")+
geom_text(data=fig4f.df02.1,
aes(x=x_B,y=y_B,label=B_prop),
hjust=1,color="black")+
theme_void()+
theme(axis.title.y = element_text(angle = 90),
legend.title = element_blank())+
scale_fill_manual(values = c("A"="#312782","B"="#8abe42"),
labels=c("A"="Obesity: down\nRev: restored",
"B"="Obesity: down\nRev: not restored"))+
labs(y="Downregulated")

library(patchwork)
p1/p2
出图后再手动编辑文本的位置

示例数据和代码可以给推文点赞,然后点击在看,最后留言获取
欢迎大家关注我的公众号
小明的数据分析笔记本
小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!
微信公众号好像又有改动,如果没有将这个公众号设为星标的话,会经常错过公众号的推文,个人建议将 小明的数据分析笔记本 公众号添加星标,添加方法是



我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
-if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby有很大不同。由于我与ruby之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback