将多个ggplot几何图形组合成一个图形

时间:2019-02-06 05:08:46

标签: r ggplot2

我可以将以下图形生成为两个图形,但无法弄清楚如何将它们组合成一个图形,其中的条形图要比“地毯”上的密度要大。

bars <- data.frame( start=c(1,34,67,98), stop=c(34,67,98,125), label=c(1,2,1,3) )
points <- data.frame( x=c(16,29,37,52,58,68,77,89,103,114) )
ggplot(bars, aes(xmin = start, xmax = stop, ymin=label-1, ymax=label, fill=label)) + geom_rect()
ggplot(data=points, aes(x=x)) + geom_density() + geom_rug()

我尝试过类似的事情:

    ggplot(bars, aes(xmin = start, xmax = stop, ymin=label-1, ymax=label, fill=label)) + 
 geom_rect() + 
    geom_density(data=points, aes(x=x)) + 
    geom_rug(data=points, aes(x=x))

但是似乎后面的geom_X调用弄乱了第一个调用:

  

FUN(X [[i]],...)中的错误:找不到对象'label'

3 个答案:

答案 0 :(得分:2)

在图的每个部分中,都有不同的变量映射到 x y 。因此,您必须从原始的aes()调用中抽出ggplot()规范(这使其适用于所有几何),而应为每个几何指定不同的名称。然后,您必须指定每个geom应该使用哪些数据。像这样:

ggplot(bars) + 
    geom_density(data = points, aes(x = x, y = stat(scaled))) + 
    geom_rug(data = points, aes(x = x)) +
    # Will use the default bars data
    geom_rect(aes(xmin = start, xmax = stop, ymin=label-1, ymax=label, fill=label))

答案 1 :(得分:0)

有帮助吗?

    ggplot(bars, aes(xmin = start, xmax = stop, ymin=label-1, ymax=label, fill=label)) + 
      geom_rect()+
      geom_rug(data=points, aes(x=x),inherit.aes = F)+
      geom_density(data=points,aes(x=x,y=stat(scaled)),inherit.aes = F)
 #need a y argument in geom_density. 
#This is from @Marius' answer. Aim is to show inherit.aes usage

答案 2 :(得分:0)

这项工作将会完成

bars <- data.frame( start=c(1,34,67,98), stop=c(34,67,98,125), label=c(1,2,1,3) )
points <- data.frame( x=c(16,29,37,52,58,68,77,89,103,114) )
points2<- data.frame(x=density(points$x)$x,y= density(points$x)$y * max(bars$label)*100)
ggplot()+  geom_rect(data = bars, aes(xmin = start, xmax = stop, ymin=label-1, ymax=label, fill=label)) +
  geom_line(data = points2,aes(x=x,y=y))

imagen