2015-12-30 2 views
0

Я хотел бы построить два графика друг на друга like in this post.Сочетание двух графиков разных данных (boxplot и points)

Экспериментальные данные: У меня есть непрерывная переменная, отображающее угол ветра на определенный день в списке под названием expt$iso_xs[,8], то у меня есть скорость ветра, соответствующую этому углу в expt$iso_xs[,2].

df<-data.frame(expt$iso.xs) 

head(expt$iso.xs) 
     [,1]  [,2]  [,3]  [,4]  [,5] [,6] [,7] [,8] 
736105.4 16.62729 2.183740 7.234774 0.9791632 4.01 4.20 238.62 
736105.4 18.96705 2.489668 7.036234 0.9640366 3.82 4.00 243.14 
736105.5 20.52089 2.687636 10.355394 1.3698454 4.99 5.14 247.02 
736105.5 19.94449 2.611556 10.306912 1.3655301 4.85 5.12 249.57 
736105.5 19.43309 2.551787 11.098302 1.4646251 4.83 5.12 243.89 
736105.5 20.48259 2.689075 11.928011 1.5710530 4.89 5.09 254.23 

который выглядит следующим образом: enter image description here

данные моделирования: У меня есть data.frame z, который содержит предсказания для подмножества выше углов (0-90º).

head(z,15) 
    Tracer angle treatment bigangle 
    71.101  0   S  150 
    71.101  0   S  150 
    71.105  15   S  165 
    71.105  15   S  165 
    71.098  30   S  180 
    71.098  45   S  195 
    71.114  60   S  210 
    71.114  80   S  230 
    71.110  90   S  240 

Plotting его с помощью bigangle в качестве фактора и Tracer как:

ggplot() + 
    geom_boxplot(data=z, aes(y = (3600/Tracer/93.241), x = factor(bigangle)),outlier.shape = NA,outlier.colour = NA)+ 
    coord_cartesian(ylim=c(0, 1))+ 
    labs(x = "Angle", y = "Normalised ACh")+ 
    scale_x_discrete(labels=seq(0,360,10))+ 
    theme_classic() 

выглядит следующим образом:

enter image description here

Я хотел бы накладываться boxplot наверх части красные точки (от 150º до 240º), но следующие не работают:

ggplot() + 
     geom_boxplot(data=z, aes(y = (3600/Tracer/93.241), x = factor(bigangle)),outlier.shape = NA,outlier.colour = NA)+ 
     geom_point(data=df, aes(y = X2/45, x = X8),color="red")+ 
     coord_cartesian(ylim=c(0, 1))+ 
     labs(x = "Angle", y = "Normalised ACh")+ 
     scale_x_discrete(labels=seq(0,360,10))+ 
     theme_classic() 

enter image description here

Любые мысли были бы оценена, Приветствие

+0

Примечание это другой вопрос http://stackoverflow.com/posts/34515961/edit, но с использованием тех же данных – HCAI

+1

Не могли бы вы сделать минимальный воспроизводимый пример с копируемыми данными? Либо используйте 'dput()', чтобы обмениваться данными, использовать встроенные данные или имитировать данные (со случайным семенем). Я не думаю, что 6 строк 'expt' и 15 строк' z' достаточны для демонстрационного кода. – Gregor

ответ

4

Я думаю, что ваша единственная проблема пытается определить дискретный й масштаб для непрерывных данных. Это и вам нужен group для вашей геометрии boxplot.

В качестве иллюстративного примера:

mt = mtcars 
mt$wt_bin = cut(mt$wt, breaks = c(1, 3, 4.5, 6)) 
ggplot(mt, aes(x = wt, y = mpg)) + 
    geom_point() + 
    geom_boxplot(aes(group = wt_bin, x = wt), alpha = 0.4) 

enter image description here

Как geom_boxplot помощь говорит:

You can also use boxplots with continuous x, as long as you supply a grouping variable. cut_width is particularly useful

Пример в помощь показывает этот код:

ggplot(diamonds, aes(carat, price)) + 
    geom_boxplot(aes(group = cut_width(carat, 0.25))) 

Вы можете, конечно, добавить слой geom_point (хотя в данных diamonds слишком много очков, чтобы быть хорошим сюжетом).

Для вашего масштаба не используйте дискретную шкалу, если у вас нет факторов на оси. Вероятно, вы хотите scale_x_continuous(breaks = seq(0, 360, 10)).

Различные наборы данных могут использоваться обычным способом с аргументом data.Продолжая предыдущий пример, но с использованием различных данных для geom_point слоя:

similar_to_mt = data.frame(wt = runif(100, 1, 6), mpg = rnorm(100, 20, 4)) 
ggplot(mt, aes(x = wt, y = mpg)) + 
    geom_point(data = similar_to_mt) + 
    geom_boxplot(data = mt, aes(group = wt_bin, x = wt), alpha = 0.4) 

enter image description here

+0

Спасибо, Грегор. Можете ли вы, например, наложить данные алмаза на mt-графики? Это то, что я пытаюсь ... – HCAI

+0

Нет проблем, см. Правки. – Gregor

+1

В следующий раз, когда вы зададите вопрос, пожалуйста, сообщайте данные воспроизводимым образом. Это будет намного быстрее ответить. – Gregor