
对于这个问题,我们很多同学首先想到的就是“拼图”,这也是我的首先想到的。
plot_grid()函数进行拼图拼图的方式很多,我一直都是使用plot_grid()进行拼图,我个人认为这是很简单的方法。
### 数据
head(df)
CCLE_ID all_pseudotime emt_score target_tissue CI.05 CI.95
1 22RV1_PROSTATE 49.27840 -1.104890 brain -3.824015 -2.976779
2 22RV1_PROSTATE 49.27840 -1.104890 lung -3.824015 -2.721612
3 22RV1_PROSTATE 49.27840 -1.104890 bone -3.824015 -2.503531
4 22RV1_PROSTATE 49.27840 -1.104890 liver -3.285850 -2.146388
5 22RV1_PROSTATE 49.27840 -1.104890 kidney -3.824015 -3.141363
6 2313287_STOMACH 45.07075 -1.792617 kidney -4.034838 -4.034838
mean penetrance status_metpot
1 -3.220084 0.14285714 weakly_metastatic
2 -3.135029 0.07142857 weakly_metastatic
3 -2.940992 0.07142857 weakly_metastatic
4 -2.438389 0.21428571 weakly_metastatic
5 -3.467631 0.07142857 weakly_metastatic
6 -4.034838 0.00000000 non_metastatic
## 绘制图形
p1
p2
p3
..............
## 拼图
plot_grid(p1,p2,p3,
p4,p5,p6,
p7,p8,p9,
p10,p11,p12,
ncol = 3, nrow = 4, labels = "AUTO", align = "hv", label_size = 16)
具体参数:
ncol和nrow:行与列的数量labels = “AUTO” `:自动标注A、B、C等,也可以自己设定label_size:labels的大小align:Specifies whether graphs in the grid should be horizontally ("h") or vertically ("v") aligned. Options are "none" (default), "hv" (align in both directions), "h", and "v"plot_grid()文档。同类型的图,你需要话很多遍,或者直接写个
for循环也可以的。
偷懒的操作要如何做呢?使用facet_wrap()函数即可,具体操作请看下面的。
直接使用前面的数据和代码绘制[跟着NC学作图 | 差异比较小提琴+柱状组合图]

添加facet_wrap(~target_tissue)即可。因此,在数据中需要有target_tissue的分类信息。

ggviolin(df, "status_metpot", "emt_score", fill = "status_metpot",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "boxplot", add.params = list(fill = "white"),xlab="Metastatic Potential")+
stat_compare_means(comparisons = my_comparisons,method="wilcox")+
geom_hline(yintercept=0, linetype="dashed", color = "red")+
## 添加该信息组
facet_wrap(~target_tissue)

往期文章:
1. 最全WGCNA教程(替换数据即可出全部结果与图形)
2. 精美图形绘制教程
小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
给定一个数组a,什么是实现其组合直到第n的最佳方法?例如:a=%i[abc]n=2#Expected=>[[],[:a],[:b],[:c],[:a,b],[:b,:c],[:c,:a]] 最佳答案 做如下:a=%w[abc]n=30.upto(n).flat_map{|i|a.combination(i).to_a}#=>[[],["a"],["b"],["c"],["a","b"],#["a","c"],["b","c"],["a","b","c"]] 关于ruby-最多n的组合,我
我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代
我有一个熟悉的问题,看起来像是数学世界的排列/组合。如何通过ruby实现以下目标?badges="1-2-3"badge_cascade=[]badges.split("-").eachdo|b|badge_cascade["1","2","3"]ButIwantittobeis:=>["1","2","3","1-2","2-3","3-1","2-1","3-2","1-3","1-2-3","2-3-1","3-1-2"] 最佳答案 函数式方法:bs="1-2-3".split("-")strings=1.upto(bs.
在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种
对于一个电子商务应用程序,我试图将选项的散列(每个选项都有一系列选择)转换为代表这些选择组合的散列数组。例如:#Input:{:color=>["blue","grey"],:size=>["s","m","l"]}#Output:[{:color=>"blue",:size=>"s"},{:color=>"blue",:size=>"m"},{:color=>"blue",:size=>"m"},{:color=>"grey",:size=>"s"},{:color=>"grey",:size=>"m"},{:color=>"grey",:size=>"m"}]Input内部可能有额
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将splat转换为数组文字,而不必每次都对其调用+方法。那么,为什么+比splat更快?我使用了这个基准代码:deftest(trials=1000)head=[1,2,3]tail=100.times.to_at=Time.now.to_ftrials.timesdo|i|a=[head,*tail]endputs"splatdonein#{Time.now.to_f-t}"t=Time.now.to_ftrials.timesdo|i|a=head+tailendputs"
这里是初级程序员,只是想了解Ruby背后的过程sort使用飞船操作符时的方法.希望有人能帮忙。在以下内容中:array=[1,2,3]array.sort{|a,b|ab}...我明白sort一次比较一对数字,然后返回-1如果a属于b之前,0如果它们相等,或者1如果a应该遵循b.但是在降序排序的情况下,像这样:array.sort{|a,b|ba}...到底发生了什么?是否sort还是比较ab然后翻转结果?或者它是在解释return的-1,0和1具有相反的行为?换句话说,为什么要像这样将变量放在block中:array.sort{|b,a|ba}...结果与第一个示例中的排序模式相同?