R 将多个ggplot geom组合成一个图形

R 将多个ggplot geom组合成一个图形,r,ggplot2,R,Ggplot2,我可以生成以下两个图形,但无法计算如何将它们组合成一个图形,其中条形图堆叠在“地毯”上方的密度之上: 但后来的geom_X调用似乎把第一个调用搞砸了: FUN(X[[i]],…)中出错:找不到对象“label” 在绘图的每个部分都有不同的变量映射到x和y。因此,您必须从原始的ggplot()调用中提取aes()规范(使其适用于所有几何体),并为每个几何体指定不同的规范。然后您必须指定每个geom应使用的数据。比如: ggplot(bars) + geom_density(data =

我可以生成以下两个图形,但无法计算如何将它们组合成一个图形,其中条形图堆叠在“地毯”上方的密度之上:

但后来的geom_X调用似乎把第一个调用搞砸了:

FUN(X[[i]],…)中出错:找不到对象“label”


在绘图的每个部分都有不同的变量映射到x和y。因此,您必须从原始的
ggplot()
调用中提取
aes()
规范(使其适用于所有几何体),并为每个几何体指定不同的规范。然后您必须指定每个
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))

在绘图的每个部分都有不同的变量映射到x和y。因此,您必须从原始的
ggplot()
调用中提取
aes()
规范(使其适用于所有几何体),并为每个几何体指定不同的规范。然后您必须指定每个
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))
这有用吗

    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
这有用吗

    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
这是否有效:

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))
条这是否有效:

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))

条您可以添加显示当前和预期输出的图片吗?如何使用ggplot2在直方图上绘制密度图的问题已经被多次询问和回答。你找过了吗。其他问题和答案有什么问题?能否添加显示当前和预期输出的图片?如何使用ggplot2在直方图上绘制密度图的问题已被多次询问和回答。你找过了吗。其他问题和答案有什么问题?尽管我读了很多关于ggplot的书,但我从来没有注意到在ggplot()调用中指定aes()是如何迫使它应用于所有几何图形的!谢谢你的澄清!作为lagniappe,是否有一种方法将轴缩放命令链接到特定几何图形。如前所述,密度和条形重叠。我发现了一些“kluge”修复,但没有任何优雅之处(即正确的方式)。再次感谢!尽管我读了很多关于ggplot的书,但我从来没有注意到在ggplot()调用中指定aes()是如何迫使它应用于所有几何图形的!谢谢你的澄清!作为lagniappe,是否有一种方法将轴缩放命令链接到特定几何图形。如前所述,密度和条形重叠。我发现了一些“kluge”修复,但没有任何优雅之处(即正确的方式)。再次感谢!