查看: 2335|回复: 10

[R语言] 如何绘制软乎乎的云雨图?

[复制链接]

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
425
注册时间
2020.6.16
在线时间
273 小时

发表于 2021.10.18 09:51:49 | 显示全部楼层 |阅读模式
小提琴图和箱线图想必大家并不陌生,毕竟是生信文章中的老标配了。

今天要给各位安利一种将小提琴图、箱线图、抖动散点图三合一的高颜值组合图表!能够完美展示所有数据信息,让选择困难症的你不再纠结!

其名为云雨图!


一看便知,一半的小提琴图像软乎乎的云朵,抖动的散点像是滴落的雨滴,组合在一起叫云雨图真不戳!嘿嘿~


今天主要使用R语言进行云雨图的绘制,用到的R包为ggplot2及其扩展包gghalves。话不多说,现在就来画画看!

[AppleScript] 纯文本查看 复制代码
#安装gghalves包:
install.packages('gghalves')

#载入ggplot2、gghalves包:
library(ggplot2)
library(gghalves)

#设置工作目录:
setwd("C:/Users/Desktop/云雨图")

#读入数据(使用R内置的iris数据集):
data<-iris
head(data) #预览数据前六行



[AppleScript] 纯文本查看 复制代码
#绘图开始,将数据与图形建立映射,存到变量p
(使用Species及Sepal.Length为例来进行绘制):
p<-ggplot(data,aes(x=Species,
             y=Sepal.Length,
             fill=Species,
             color=Species))
p



[AppleScript] 纯文本查看 复制代码
#自定义颜色
mycolor<-c("#9DCD82","#F8B62D","#F2997A")
p0<-p+scale_color_manual(values=rev(mycolor))
+scale_fill_manual(values=rev(mycolor))
p0

#先画一半小提琴图(geom_half_violin),得到p1:
p1<-p0+geom_half_violin()
p1



[AppleScript] 纯文本查看 复制代码
#一半小提琴图的参数调整:
#position:位置调整,这里将其向右水平移动0.1;
#side:显示哪一侧, "I"代表左侧,"R"代表右侧,默认"I";
#adjust:调整带宽,这里设为1.2使宽带略变平滑;
#trim:小提琴图尾部的数据修整,默认为"T",表示将尾部修整到数据范围;"F"表示不修剪尾部;
p2<-p0+geom_half_violin(position=position_nudge(x=0.1,y=0),
side='R',adjust=1.2,trim=F,color=NA,alpha=0.8)
p2



[AppleScript] 纯文本查看 复制代码
#在半个小提琴图左侧加上散点图,得到p3:
p3<-p2+geom_point()
p3



[AppleScript] 纯文本查看 复制代码
#调整散点,得到p4:
p4<-p2+geom_point(aes
(x = as.numeric(Species)-0.1,#散点位置向左平移0.1
y = Sepal.Length,
color = Species),
position = position_jitter(width =0.03),size =0.2, shape = 20)#调整散点,使取值相同的原重合散点分散开
p4



[AppleScript] 纯文本查看 复制代码
#在p4散点和二分之一小提琴图中间添加箱线图,得到p5:
p5<-p4+geom_boxplot(outlier.shape = NA, #隐藏离群点;
width =0.1,
alpha=0.7)
p5



[AppleScript] 纯文本查看 复制代码
#将图形翻转
p6<-p5+coord_flip()
p6



[AppleScript] 纯文本查看 复制代码
#再次自定义颜色
mycolor2<-c("#85C0D9","#CE97B0","#F4A9A8")
P7<-p6+scale_color_manual(values=rev(mycolor2))+scale_fill_manual(values=rev(mycolor2))
P7



ggplot2默认灰格的背景还是改一改比较好:

[AppleScript] 纯文本查看 复制代码
#去掉灰底
p8+theme_bw()



[AppleScript] 纯文本查看 复制代码
#再去掉背景网格线
p8+theme_bw()+theme(panel.grid=element_blank())



[AppleScript] 纯文本查看 复制代码
#或者自定义主题

top.mar=0.2
right.mar=0.2
bottom.mar=0.2
left.mar=0.2

mytheme<-theme_classic()+
  theme(text=element_text(family = "sans",color ="gray30",size = 12),
        axis.line = element_line(size = 0.6,color = "gray30"),
        axis.ticks = element_line(size = 0.6,color = "gray30"),
        axis.ticks.length = unit(1.5,units = "mm"),
        plot.margin=unit(x=c(top.mar,right.mar,bottom.mar,left.mar),
                         units="inches"))
p5+mytheme



[AppleScript] 纯文本查看 复制代码
p7+mytheme



如果不满意还可以再换个配色试试:


如此一来,云雨图就画好啦!是不是很简单?


关于gghalves这个扩展包我们只用到了geom_half_violin函数,除此之外还可以绘制geom_half_point、geom_half_boxplot等一半一半的图表,大家感兴趣的话可以去用用看,把这些一半一半的图进行混合组装!

除了用gghalves,ggpubr也能够绘制,都可以多多尝试。好咯,本次分享就到这里啦~

▼参考资料▼
https://rdrr.io/cran/gghalves/f/vignettes/gghalves.Rmd


本文作者:基迪奥-喵酱

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
新的一天加油!
回复

使用道具 举报

迅猛龙

Rank: 8Rank: 8

主题
0
注册时间
2020.11.21
在线时间
68 小时

发表于 2021.10.18 20:55:15 | 显示全部楼层
坚持就是胜利!
回复

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2021.6.22
在线时间
10 小时

发表于 2021.10.18 21:07:13 | 显示全部楼层
学习
回复

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
1
注册时间
2016.8.25
在线时间
89 小时

发表于 2021.10.18 21:34:24 | 显示全部楼层
名字起的好
当工人也要加油
回复 支持 反对

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
3
注册时间
2017.9.8
在线时间
71 小时

发表于 2021.10.19 08:02:59 | 显示全部楼层
加油,加油!
回复

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2016.5.16
在线时间
151 小时

发表于 2021.10.19 09:24:30 | 显示全部楼层
666  好看又实用  感谢大佬分享
新的一天加油!
回复 支持 反对

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
3
注册时间
2017.9.8
在线时间
71 小时

发表于 2021.10.20 08:09:19 | 显示全部楼层
加油,加油!
回复

使用道具 举报

迅猛龙

Rank: 8Rank: 8

主题
0
注册时间
2020.11.21
在线时间
68 小时

发表于 2021.10.20 14:58:25 | 显示全部楼层
坚持就是胜利!
回复

使用道具 举报

中华鲟

Rank: 5Rank: 5

主题
13
注册时间
2018.1.3
在线时间
326 小时

热心会员活跃会员


发表于 2021.10.20 18:36:44 | 显示全部楼层
(๑•̀ㅂ•́)و✧
新的一天加油!
回复 支持 反对

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2021.6.22
在线时间
10 小时

发表于 3 天前 | 显示全部楼层
学习
回复

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2021.6.22
在线时间
10 小时

发表于 前天 08:03 | 显示全部楼层
打卡
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表