R中的叠加图和直方图与ggplot

时间:2017-08-03 12:34:15

标签: r ggplot2 overlay histogram

我试图在R中叠加一个Plot和一个直方图,使用ggplot2包。 绘图包含一组曲线(由于对数轴可视化为直线)和水平线。

enter image description here

我想在同一图像上绘制直方图,显示曲线和水平线之间的交叉点的密度分布。我可以单独绘制直方图,但不能绘制在图表上,因为aes-length不相同(最后一个交点是x = 800,而x asis要长得多)。

我写的代码是:

baseplot + 
geom_histogram(data = timesdf, aes(v)) + xlim(0,2000) 

其中v包含曲线和虚线之间的交点 有什么想法吗?

编辑:正如我所建议的那样,我写了一个可重复的例子:

    library(ggplot2)

xvalues <- c(0:100)

yvalues1 <- xvalues^2-1000
yvalues2 <- xvalues^3-100
yvalues3 <- xvalues^4-10
yvalues4 <- xvalues^5-50

plotdf <- as.data.frame(xvalues)
plotdf$horiz <- 5
plotdf$vert1 <- yvalues1
plotdf$vert2 <- yvalues2
plotdf$vert3 <- yvalues3
plotdf$vert4 <- yvalues4

baseplot <- ggplot(data = plotdf, mapping = aes(x= xvalues, y= horiz))+
  geom_line(linetype = "dashed", size = 1)+
  geom_line(data = plotdf, mapping = aes(x= xvalues, y = vert1))+
  geom_line(data = plotdf, mapping = aes(x= xvalues, y = vert2))+
  geom_line(data = plotdf, mapping = aes(x= xvalues, y = vert3))+
  geom_line(data = plotdf, mapping = aes(x= xvalues, y = vert4))+
  coord_cartesian(xlim=c(0, 100), ylim=c(0, 1000))

baseplot

v<-c(ncol(plotdf)-1)
for(i in 1:ncol(plotdf)){
  v[i] <- plotdf[max(which(plotdf[,i]<5)),1]
}
v <- as.integer(v[-1])

timesdf <- as.data.frame(v)

# my wish: visualize baseplot and histplot on the same image
histplot <- ggplot() + geom_histogram(data = timesdf, aes(v)) + 
  coord_cartesian(xlim=c(0, 100), ylim=c(0, 10))

0 个答案:

没有答案