创建密度图以比较多个不同组中的两个变量
Create density plots to compare two variables across many different groups
我有两个变量,值范围从 1 到 10。对于每个变量,有超过 30k 行,被许多国家(由变量“国家”标识)分割。我需要为所有这些国家/地区的这两个变量创建一个组合密度图。
我知道怎么做。要获得许多不同国家/地区的密度图,我可以使用 facet_wrap:
ggplot(df, aes(x=var1)) +
geom_density() +
facet_wrap(~country)
另一方面,要在同一图形中绘制两个不同变量的密度图,我可以使用类似的东西:
plot(density(df$var1)) +
lines(density(df$var2))
可能还有其他选项,如 ggjoy,但我无法让其中的 none 与 facet_wrap 一起工作,也无法找到任何其他方法将两个变量的多个密度图放在一起。
编辑:
这应该适合你:
library(tidyverse)
library(hrbrthemes) # theme ggplot
# fake data generation var1 and var2 integer between 1 and 10 and random country names from vector country
df <- data.frame(replicate(2,sample(0:10,100,rep=TRUE)))
colnames(df) <- c("var1", "var2")
country <- c("Albania", "Andorra", "Austria", "Bahrain", "Morocco", "Namibia")
df$country <- sample(country, 100, replace = TRUE)
# df to long format
df1 <- df %>%
pivot_longer(
cols = var1:var2,
names_to = "variable",
values_to = "value"
)
# plot multilevel density plot
# plot multileve density with facet_warp
p <- ggplot(data=df1, aes(x=value, group=variable, fill=variable)) +
geom_density(adjust=1.5, alpha=.4) +
facet_wrap(~country) +
theme_ipsum()
p
我有两个变量,值范围从 1 到 10。对于每个变量,有超过 30k 行,被许多国家(由变量“国家”标识)分割。我需要为所有这些国家/地区的这两个变量创建一个组合密度图。
我知道怎么做。要获得许多不同国家/地区的密度图,我可以使用 facet_wrap:
ggplot(df, aes(x=var1)) +
geom_density() +
facet_wrap(~country)
另一方面,要在同一图形中绘制两个不同变量的密度图,我可以使用类似的东西:
plot(density(df$var1)) +
lines(density(df$var2))
可能还有其他选项,如 ggjoy,但我无法让其中的 none 与 facet_wrap 一起工作,也无法找到任何其他方法将两个变量的多个密度图放在一起。
编辑: 这应该适合你:
library(tidyverse)
library(hrbrthemes) # theme ggplot
# fake data generation var1 and var2 integer between 1 and 10 and random country names from vector country
df <- data.frame(replicate(2,sample(0:10,100,rep=TRUE)))
colnames(df) <- c("var1", "var2")
country <- c("Albania", "Andorra", "Austria", "Bahrain", "Morocco", "Namibia")
df$country <- sample(country, 100, replace = TRUE)
# df to long format
df1 <- df %>%
pivot_longer(
cols = var1:var2,
names_to = "variable",
values_to = "value"
)
# plot multilevel density plot
# plot multileve density with facet_warp
p <- ggplot(data=df1, aes(x=value, group=variable, fill=variable)) +
geom_density(adjust=1.5, alpha=.4) +
facet_wrap(~country) +
theme_ipsum()
p