R、 将条形图叠加为ggplot图形上的比例

R、 将条形图叠加为ggplot图形上的比例,r,ggplot2,R,Ggplot2,我在RStudio工作,使用ggplot2。我想创建一个条形图,它将有效地作为米/秒的比例。然后我想创建一个ggplot图,这个条形图叠加在图上,在图上稍微透明。因此,我将有如下内容: barplot(DF1,space=20,axes=FALSE,las=2,col=1,xlab="meters/second") 这就产生了: 图为: ggplot(DF2, aes(x=Time, y=N1_ave)) + geom_line() + ylim(-1,1) + ggtitle("0.

我在RStudio工作,使用ggplot2。我想创建一个条形图,它将有效地作为米/秒的比例。然后我想创建一个ggplot图,这个条形图叠加在图上,在图上稍微透明。因此,我将有如下内容:

   barplot(DF1,space=20,axes=FALSE,las=2,col=1,xlab="meters/second")
这就产生了:

图为:

ggplot(DF2, aes(x=Time, y=N1_ave)) + geom_line() + ylim(-1,1) + ggtitle("0.07 MA Average")
这就产生了:

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


这是可能的吗?

如果看不到您的数据,很难确定,但是根据您的描述,我们将创建一个
ggplot
,但是我们将使用一个数据框来使用
geom\u line
绘制
N1\u ave
,使用
geom\u 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")

如果看不到您的数据,很难确定,但是根据您的描述,我们将创建一个
ggplot
,但是我们将使用一个数据框来使用
geom\u line
绘制
N1\u ave
,使用
geom\u 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")

如果看不到您的数据,很难确定,但是根据您的描述,我们将创建一个
ggplot
,但是我们将使用一个数据框来使用
geom\u line
绘制
N1\u ave
,使用
geom\u 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")

如果看不到您的数据,很难确定,但是根据您的描述,我们将创建一个
ggplot
,但是我们将使用一个数据框来使用
geom\u line
绘制
N1\u ave
,使用
geom\u 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")


您想简单地将一个绘图覆盖在另一个绘图上,还是使用ggplot绘制网格?无论如何,添加
dput(DF)
肯定会有帮助。如果可以将一个绘图覆盖在另一个绘图上(以生成第三个图像),那将是完美的。我还没有遇到过这样的覆盖示例,我认为这并不容易。虽然用ggplot绘制网格似乎很容易,但前提是x标度以某种方式对齐。我知道,可能不可能使条形图具有相同的x标度(它们是两个独立的度量值),所以我想没有办法做到这一点。我以前也找不到任何类似的尝试。我注意到,您可以通过简单地添加“+geom_bar()”来添加另一个图形的图形ontop,即使它们没有相同的值然后像平常一样输入值,并简单地更改条形图的不透明度。是简单地将一个绘图覆盖在另一个绘图上,还是使用ggplot绘制网格?无论如何,添加
dput(DF)
肯定会有帮助。如果可以将一个绘图覆盖在另一个绘图上(以生成第三个图像),那将是完美的。我还没有遇到过这样的覆盖示例,我认为这并不容易。虽然用ggplot绘制网格似乎很容易,但前提是x标度以某种方式对齐。我知道,可能不可能使条形图具有相同的x标度(它们是两个独立的度量值),所以我想没有办法做到这一点。我以前也找不到任何类似的尝试。我注意到,您可以通过简单地添加“+geom_bar()”来添加另一个图形的图形ontop,即使它们没有相同的值然后像平常一样输入值,并简单地更改条形图的不透明度。是简单地将一个绘图覆盖在另一个绘图上,还是使用ggplot绘制网格?无论如何,添加
dput(DF)
肯定会有帮助。如果可以将一个绘图覆盖在另一个绘图上(以生成第三个图像),那将是完美的。我还没有遇到过这样的覆盖示例,我认为这并不容易。虽然用ggplot绘制网格似乎很容易,但前提是x标度以某种方式对齐。我知道,可能不可能使条形图具有相同的x标度(它们是两个独立的度量值),所以我想没有办法做到这一点。我以前也找不到任何类似的尝试。我注意到你可以在另一个图的上面添加一个图,即使它们没有相同的值,只需一个