五分钟学会用R绘制“棒棒糖”图

“棒棒糖”我们大家都吃过,就是一个大大的原点和一根小棍组成。那在论文中,我们也常常拿这种简单好看的图形来表示一些生物学的意义。

从生信角度上来看,棒棒糖图在ggplot中可以通过使用geom_point()函数绘制糖的部分,以及使用geom_segment()函数绘制棒棒的部分,来实现柱状图和散点图的效果组合而成的图形。

小果看到文章中好看的气泡图,忍不住想复刻出来,下面跟随小果的思路来绘制出你喜欢的气泡图叭~

基础棒棒糖

# 安装并加载包

install.packages(“ggplot2”)

library(ggplot2)

# 创造数值变量数据

data1 <- data.frame(x=seq(1,25), y=abs(rnorm(25)))

# 作图

p1 <- ggplot(data1, aes(x=x, y=y)) +

geom_point() +

geom_segment( aes(x=x, xend=x, y=0, yend=y))

截屏2023-07-11 22.27.13

按照小果前文的思路就是geom_point() + geom_segment()函数可以实现棒棒糖的绘制,但是目前看还是不太美观。我们需要进一步学习,来把图做的美观。

自定义点和线

data1 <- data.frame(x=c(paste(“pathway”,1:9)), y=abs(rnorm(9)))

ggplot(data1, aes(x=x, y=y)) +

geom_segment( aes(x=x, xend=x, y=0, yend=y),size=1, color=”grey”, linetype=”longdash” )+

geom_point( size=3, color=”black”, fill=alpha(“red”, 0.3), alpha=0.7, shape=21, stroke=2)#调节一些点的性质的参数+

theme_light() +

#coord_flip() + #控制图形是否水平放置,这里小果提示,可以尝试得到更好的效果哦~

theme(

panel.grid.major.x = element_blank(),

panel.border = element_blank(),

axis.ticks.x = element_blank()

) +

xlab(“Pathways”) +

ylab(“Counts”)

截屏2023-07-11 22.41.17

顺序调整

linstall.packages(“dply”)

install.packages(“forcats”)

library(ggplot2)

library(forcats)

library(dplyr)

data1%>%

mutate(x = fct_reorder(x,y))%>% #降序的话改为desc(y)

ggplot(aes(x= x, y=y,color = x)) #这里映射了相应的颜色+

geom_segment( aes(x=x, xend=x, y=0, yend=y),size=1,linetype=”dotdash” )+

geom_point( size=5, color= “black”, fill=alpha(“red”, 0.3), alpha=0.7, shape=21, stroke=2)+

theme_light() +

#coord_flip() + 控制图形是否水平放置

theme(

panel.grid.major.x = element_blank(),

panel.border = element_blank(),

axis.ticks.x = element_blank()

) +

xlab(“Pathways”) +

ylab(“Counts”)

这样是不是更加的清晰好看了呢~

截屏2023-07-11 22.56.42

更改图表的基线

data1%>%

mutate(x = fct_reorder(x,y))%>% #降序的话改为desc(y)

ggplot(aes(x= x, y=y,color = x)) +

geom_segment( aes(x=x, xend=x, y=1, yend=y),size=1,linetype=”dotdash” )+

geom_point( size=5, color= “black”, fill=alpha(“red”, 0.3), alpha=0.7, shape=21, stroke=2)+

theme_light() +

#coord_flip() + 控制图形是否水平放置

theme(

panel.grid.major.x = element_blank(),

panel.border = element_blank(),

axis.ticks.x = element_blank()

) +

xlab(“Pathways”) +

ylab(“Counts”)

截屏2023-07-11 23.00.31

这样的图是不是有点意思了~

控制图形是否水平放置

data1%>%

mutate(x = fct_reorder(x,y))%>% #降序的话改为desc(y)

ggplot(aes(x= x, y=y,color = x)) +

geom_segment( aes(x=x, xend=x, y=1, yend=y),size=1,linetype=”longdash” )+

geom_point( size=5, color= “black”, fill=alpha(“red”, 0.3), alpha=0.7, shape=21, stroke=2)+

theme_light() +

coord_flip() + #控制图形是否水平放置

theme(

panel.grid.major.x = element_blank(),

panel.border = element_blank(),

axis.ticks.x = element_blank()

) +

xlab(“Pathways”) +

ylab(“Counts”)

截屏2023-07-11 23.02.49

这样图就很接近论文中的图表了,可以根据自己的需求自行进行调节相应的参数哦~

图的含义

作图一定要明确相应的图想要展示给读者什么样的信息,那这里小果提供了一下几个有关气泡图的表达含义:

  1. 可视化变量之间的关系:通过将颜色映射到一个连续的变量,我们可以直观地看到变量之间的关系。例如,在气泡图中,可以使用颜色来表示第三个变量(例如,y变量),这样我们可以同时看到x、y两个变量之间的关系。
  2. 强调变量的连续性:使用颜色映射可以强调变量的连续性。对于气泡图来说,通过使用渐变的颜色,我们可以更好地展示变量的不同取值之间的变化。这对于展示物种分布、基因表达等连续性变量非常有用。
  3. 比较不同组之间的差异:通过在不同组之间使用不同的颜色映射,我们可以更好地比较它们之间的差异。例如,在棒棒糖图中,可以使用不同的颜色来表示不同的物种,这样我们可以直观地比较它们在不同组之间的丰度差异。

如果你在作图中有问题,可以借助一些网上的云作图工具来实现http://www.biocloudservice.com/home.html

好了,这样我们“棒棒糖”就画完了。小伙伴们如果有什么问题就和小果讨论吧。