多个ggplot的geom组合成一个数字

问题描述 投票:0回答:3

我可以生成以下两个数字,但无法弄清楚如何将它们组合成与上面的“地毯”堆积密度堆叠上方的酒吧一个单一的数字:

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]],...):对象 '标签' 未找到

r ggplot2
3个回答
2
投票

你必须在剧情的每个部分映射到x和y不同的变量。所以,你必须拉aes()规范了原来的ggplot()调用(这使得它适用于所有geoms)的,而是不同的指定它为每个GEOM。然后,你必须指定每个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))

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

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

© www.soinside.com 2019 - 2024. All rights reserved.