R中同一图上的两个直方图

Two histograms on the same plot in R

我有以下形式的数据。

v1   v2
t1    2.2
t1    3.2
t1    2.2
t1    2.2
t1    4.0
t2    3.8
t2    2.0
t2    2.1
t2    2.0
t2    3.0

我想要 v2 的直方图用于同一图上 v1 的类别(使用密度)。有人可以帮帮我吗?

您可以尝试使用 ggplot2facet_wrap() 的分面方法。我们将使用 geom_density() 来获得密度。这里的代码:

library(ggplot2)
library(dplyr)

数据

#Data
df <- structure(list(v1 = c("t1", "t1", "t1", "t1", "t1", "t2", "t2", 
"t2", "t2", "t2"), v2 = c(2.2, 3.2, 2.2, 2.2, 4, 3.8, 2, 2.1, 
2, 3)), class = "data.frame", row.names = c(NA, -10L))

代码

#Code for plot
df %>%
  ggplot(aes(x=v2,color=v1))+
  geom_density()+
  facet_wrap(.~v1)

输出

或者如果你只想要一个情节,这里的代码:

#Code for plot 2
df %>%
  ggplot(aes(x=v2,color=v1,group=v2))+
  geom_density()

输出

或者同时使用 geom_histogram()geom_density():

#Code for plot 3
df %>%
  ggplot(aes(x=v2,color=v1,fill=v1))+
  geom_histogram()+
  geom_density(alpha=0.5)+
  facet_wrap(.~v1)

输出

或者如果你想要一个情节:

#Code for plot 4
df %>%
  ggplot(aes(x=v2,color=v1,fill=v1,group=v1))+
  geom_histogram()+
  geom_density(alpha=0.5)

输出

也许,我们可以用geom_histogram

library(ggplot2)
ggplot(df1, aes(x = v2)) +
      geom_histogram() +
      facet_grid(~ v1)


或者另一种选择是 ggpubr

library(ggpubr)
gghistogram(df1, x = "v2", add = "mean", rug = TRUE, 
        fill = "v1", add_density = TRUE)


geom_densityfill

的另一个选项
ggplot(df1, aes(x = v2, fill = v1)) + 
       geom_density() + 
       facet_grid(~ v1)

数据

df1 <- structure(list(v1 = c("t1", "t1", "t1", "t1", "t1", "t2", "t2", 
"t2", "t2", "t2"), v2 = c(2.2, 3.2, 2.2, 2.2, 4, 3.8, 2, 2.1, 
2, 3)), class = "data.frame", row.names = c(NA, -10L))