在 ggplot 中通过 str_detect class 添加多个 geom_density 行
add multiple geom_density lines by str_detect class in ggplot
我希望能够在 ggplot 中的密度图上叠加多条线,以便为检测为子字符串的多个 classes 绘制距离?
dat<- data.frame(Image = c(1,1,1,2,2,2,3,3,3,4,4,4),
Class = c("A","A:B","A:C","A:D","D:C","B","B:C","A:B","C:D","A:B:C","A:B:C ","A:B:C:D"),
Distance = c(1,5,6,2,4,8,9,1,2,3,7,8))
例如,我希望包含 class“A”或“B”的任何子字符串的距离在同一图上显示为单独的行。我该怎么做?
dat %>% filter(str_detect(Class,"A")) %>%
ggplot(aes(Distance))+
geom_density()
dat %>% filter(str_detect(Class,"B")) %>%
ggplot(aes(Distance))+
geom_density()
这可以通过使用多个 geom_density
层来实现,您可以在其中将每个密度层传递给过滤后的数据集。为了减少代码重复,我的方法使用辅助函数和 lapply
通过遍历要包含在图中的模式向量来添加这些密度层:
dat<- data.frame(Image = c(1,1,1,2,2,2,3,3,3,4,4,4),
Class = c("A","A:B","A:C","A:D","D:C","B","B:C","A:B","C:D","A:B:C","A:B:C ","A:B:C:D"),
Distance = c(1,5,6,2,4,8,9,1,2,3,7,8))
library(dplyr)
library(stringr)
library(ggplot2)
make_layer <- function(pattern) {
dat <- dat %>%
filter(str_detect(Class, pattern))
geom_density(data = dat, aes(color = pattern))
}
patterns <- c("A", "B", "A:B:C")
ggplot(mapping = aes(Distance)) +
lapply(patterns, make_layer)
我希望能够在 ggplot 中的密度图上叠加多条线,以便为检测为子字符串的多个 classes 绘制距离?
dat<- data.frame(Image = c(1,1,1,2,2,2,3,3,3,4,4,4),
Class = c("A","A:B","A:C","A:D","D:C","B","B:C","A:B","C:D","A:B:C","A:B:C ","A:B:C:D"),
Distance = c(1,5,6,2,4,8,9,1,2,3,7,8))
例如,我希望包含 class“A”或“B”的任何子字符串的距离在同一图上显示为单独的行。我该怎么做?
dat %>% filter(str_detect(Class,"A")) %>%
ggplot(aes(Distance))+
geom_density()
dat %>% filter(str_detect(Class,"B")) %>%
ggplot(aes(Distance))+
geom_density()
这可以通过使用多个 geom_density
层来实现,您可以在其中将每个密度层传递给过滤后的数据集。为了减少代码重复,我的方法使用辅助函数和 lapply
通过遍历要包含在图中的模式向量来添加这些密度层:
dat<- data.frame(Image = c(1,1,1,2,2,2,3,3,3,4,4,4),
Class = c("A","A:B","A:C","A:D","D:C","B","B:C","A:B","C:D","A:B:C","A:B:C ","A:B:C:D"),
Distance = c(1,5,6,2,4,8,9,1,2,3,7,8))
library(dplyr)
library(stringr)
library(ggplot2)
make_layer <- function(pattern) {
dat <- dat %>%
filter(str_detect(Class, pattern))
geom_density(data = dat, aes(color = pattern))
}
patterns <- c("A", "B", "A:B:C")
ggplot(mapping = aes(Distance)) +
lapply(patterns, make_layer)