R ggplot:在geom_小提琴上添加一个理论范围()
假设我们观察到两种甲虫。我们希望使用geom_小提琴()比较它们的大小,如下所示:R ggplot:在geom_小提琴上添加一个理论范围(),r,graph,ggplot2,density-plot,R,Graph,Ggplot2,Density Plot,假设我们观察到两种甲虫。我们希望使用geom_小提琴()比较它们的大小,如下所示: df = data.frame(species=rep(c('species_a','species_b'),3), size=c(1,1.5,1.2,1.8,1.1,1.9)) ggplot(df, aes(x=species, y=size)) + geom_violin() 知道物种a的预期大小范围为[0.8,1.8],物种b的预期大小范围为[1.2,1.8] ranges = list(species_
df = data.frame(species=rep(c('species_a','species_b'),3), size=c(1,1.5,1.2,1.8,1.1,1.9))
ggplot(df, aes(x=species, y=size)) + geom_violin()
知道物种a的预期大小范围为[0.8,1.8],物种b的预期大小范围为[1.2,1.8]
ranges = list(species_a=c(0.8,1.8), species_b=c(1.2,1.8))
我们如何在图形上轻松添加此范围(例如灰色形状)?将范围放在具有物种名称和最小/最大值的单独数据框中
ranges = data.frame(species=c('species_a','species_b'),
rmin=c(0.8,1.2),rmax=c(1.2,1.8))
ranges
species rmin rmax
1 species_a 0.8 1.8
2 species_b 1.2 1.8
然后为geom\u rect()
使用新的数据框来创建放置在geom\u小提琴()下的区域。geom_blank()
用于根据原始数据帧生成x轴
ggplot(df, aes(x=species, y=size)) + geom_blank() +
geom_rect(data=ranges,aes(xmin=as.numeric(species)-0.45,
xmax=as.numeric(species)+0.45,
ymin=rmin,ymax=rmax),inherit.aes=FALSE)+
geom_violin()
将范围与物种名称和最小/最大值放在单独的数据框中
ranges = data.frame(species=c('species_a','species_b'),
rmin=c(0.8,1.2),rmax=c(1.2,1.8))
ranges
species rmin rmax
1 species_a 0.8 1.8
2 species_b 1.2 1.8
然后为geom\u rect()
使用新的数据框来创建放置在geom\u小提琴()下的区域。geom_blank()
用于根据原始数据帧生成x轴
ggplot(df, aes(x=species, y=size)) + geom_blank() +
geom_rect(data=ranges,aes(xmin=as.numeric(species)-0.45,
xmax=as.numeric(species)+0.45,
ymin=rmin,ymax=rmax),inherit.aes=FALSE)+
geom_violin()
您可以尝试以下方法:
# first, create data frame from list 'ranges'
df2 <- setNames(object = do.call(rbind.data.frame, ranges), nm = c("min_size", "max_size"))
df2$species <- rownames(df2)
# plot violins with 'df', and ranges with 'df2'.
# Set colour and size according to your own "data-ink ratio" preferences.
ggplot(data = df, aes(x = species)) +
geom_violin(aes(y = size)) +
geom_linerange(data = df2, aes(ymax = max_size, ymin = min_size), colour = "grey", size = 3)
#首先,从列表“范围”创建数据帧
df2您可以尝试以下方法:
# first, create data frame from list 'ranges'
df2 <- setNames(object = do.call(rbind.data.frame, ranges), nm = c("min_size", "max_size"))
df2$species <- rownames(df2)
# plot violins with 'df', and ranges with 'df2'.
# Set colour and size according to your own "data-ink ratio" preferences.
ggplot(data = df, aes(x = species)) +
geom_violin(aes(y = size)) +
geom_linerange(data = df2, aes(ymax = max_size, ymin = min_size), colour = "grey", size = 3)
#首先,从列表“范围”创建数据帧
df2