R,在ggplot图上叠加条形图作为比例

时间:2015-04-03 15:21:03

标签: r ggplot2

我在RStudio工作并使用ggplot2。我想创建一个条形图,它将有效地作为米/秒的比例。然后,我想创建一个ggplot图形,该条形图在图形上叠加并略微透明。所以,我会有这样的事情:

   barplot(DF1,space=20,axes=FALSE,las=2,col=1,xlab="meters/second")

创造了这个: Barplot

ggplot是:

ggplot(DF2, aes(x=Time, y=N1_ave)) + geom_line() + ylim(-1,1) + ggtitle("0.07 MA Average")

创建:

ggplot

组合它们后我想要的是这样的:

combined

这一切都可能吗?

1 个答案:

答案 0 :(得分:3)

如果没有看到您的数据,很难确定,但根据您的说明,我们会创建一个ggplot,但我们会使用一个使用N1_ave绘制geom_line的数据框和使用geom_segment创建垂直线的数据框。这样,ggplot负责所有缩放,我们不必担心两个不同图之间的比例尺。

关键是你必须在barVals中设置x值,以便在图表的正确位置绘制垂直线。对于这个例子,我只是制作了它们,因为我不知道实际值应该是什么。

这是假数据的一个例子:

# This is the data series
set.seed(10)
dat = data.frame(x=seq(0,0.15,length.out=200), y=rnorm(200,0,0.2))

# These are the meters/second labels for the vertical lines
labels=c(0.27,0.29,0.31,0.33,0.36,0.4,0.44,0.5,
         0.57,0.67,0.8,1,1.34,2.01,4.02,Inf)

# These are the x-values for where the vertical lines will be plotted 
# (plus the labels created above)
barVals = data.frame(x=seq(0.005,0.145,length.out=length(labels)),
                     labels=labels)

ggplot(dat, aes(x,y)) +
  geom_segment(data=barVals, aes(x=x, xend=x), y=-0.8, yend=0.8, colour="grey70") +
  geom_text(data=barVals, aes(label=labels), y=-0.85, size=4, colour="grey50") +
  geom_line(aes(group=1)) + 
  scale_y_continuous(limits=c(-1,1)) +
  labs(x="Time", y="N1_ave") +
  annotate(geom="text", x=0.075, y=-0.95, label="meters/second", colour="grey50")

enter image description here