Трудно знать наверняка, не видя ваши данные, но, основываясь на описании, как об этом: Мы будем создавать единый ggplot
, но мы будем использовать один кадр данных для построения N1_ave
с использованием geom_line
и другой, чтобы создать вертикальные линии с использованием geom_segment
. Таким образом, ggplot
заботится обо всех масштабах, и нам не нужно беспокоиться о совпадении шкал между двумя разными графиками.
Ключ в том, что вы должны установить значения x в barVals
, чтобы вертикальные линии были построены в правильных местах на графике. В этом примере я только что составил их, потому что я не знаю, каковы фактические значения.
Вот пример с фальшивыми данными:
# 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)' определенно поможет. – tonytonov
Если можно просто наложить один сюжет на другой (чтобы сделать третье изображение), это было бы идеально. – Michael
Я не встречал пример такого наложения, и я не думаю, что это легко. Рисование сетки с помощью ggplot кажется достаточно простым, хотя, но только если x масштабы выровнены каким-то образом. – tonytonov