2015-04-03 2 views
0

Я работаю в RStudio и используя ggplot2. Я хочу создать график штрихов, который будет эффективно действовать как шкала для метров в секунду. Затем я хочу создать график ggplot с этим наложением штриха, наложенным и слегка прозрачным на графике. Таким образом, у меня будет что-то вроде этого:R, накладывая планку как шкалу на график 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

Вы хотите, чтобы просто наложить один участок поверх другого или нарисовать сетку с помощью ggplot? В любом случае добавление 'dput (DF)' определенно поможет. – tonytonov

+0

Если можно просто наложить один сюжет на другой (чтобы сделать третье изображение), это было бы идеально. – Michael

+1

Я не встречал пример такого наложения, и я не думаю, что это легко. Рисование сетки с помощью ggplot кажется достаточно простым, хотя, но только если x масштабы выровнены каким-то образом. – tonytonov

ответ

3

Трудно знать наверняка, не видя ваши данные, но, основываясь на описании, как об этом: Мы будем создавать единый 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") 

enter image description here

Смежные вопросы