2013-03-20 2 views
0

enter image description here У меня есть dataframe (df1), который содержит 3 столбца (y1, y2, x). Мне удалось построить график boxplot между y1, x и y2, x. У меня есть другой dataframe (df2), который содержит два столбца A, x. Я хочу построить линейный график (A, x) и добавить его в boxplot. Обратите внимание, что переменная x в обоих кадрах данных является доступом к оси, однако она имеет разные значения. Я попытался объединить и изменить как данные, так и график, основанный на коэффициенте (x) ... Я получил 3 ящика в одном графике. Мне нужно построить df2 как строку и df1 как boxplot в одном графике.Добавить строку из другого результата в график boxplot в ggplot2

df1 <- structure(list(Y1 = c(905L, 941L, 744L, 590L, 533L, 345L, 202L, 
369L, 200L, 80L, 200L, 80L, 50L, 30L, 60L, 20L, 30L, 30L), Y2 = c(774L, 
823L, 687L, 545L, 423L, 375L, 249L, 134L, 45L, 58L, 160L, 60L, 
20L, 40L, 20L, 26L, 19L, 27L), x = c(10L, 10L, 10L, 20L, 20L, 
20L, 40L, 40L, 40L, 50L, 50L, 50L, 70L, 70L, 70L, 90L, 90L, 90L 
)), .Names = c("Y1", "Y2", "x"), row.names = c(NA, -18L), class = "data.frame") 

df2 <- structure(list(Y3Line = c(384L, 717L, 914L, 359L, 241L, 265L, 
240L, 174L, 114L, 165L, 184L, 96L, 59L, 60L, 127L, 54L, 31L, 
44L), x = c(36L, 36L, 36L, 56L, 56L, 56L, 65L, 65L, 65L, 75L, 
75L, 75L, 85L, 85L, 85L, 99L, 99L, 99L)), .Names = c("A", 
"x"), row.names = c(NA, -18L), class = "data.frame") 

df_l <- melt(df1, id.vars = "x") 

ggplot(df_l, aes(x = factor(x), y =value, fill=variable )) + 
geom_boxplot()+ 
# here I'trying to add the line graph from df2 
geom_line(data = df2, aes(x = x, y=A)) 

Любые предложения?

+0

Добавить наборы данных, пожалуйста, см http://stackoverflow.com/questions/5963269/how- to-make-a-great-r-воспроизводимый пример – JT85

+0

@ JT85 проверить обновление – SimpleNEasy

ответ

1

Во втором наборе данных у вас есть три значения y для значения x, вы хотите нарисовать отдельные строки по значению x или среднему значению на x? Оба показаны ниже. Хитрость заключается в том, чтобы сначала изменить переменные x в обоих наборах данных на факторы, которые содержат все уровни обеих переменных.

df1 <-structure(list(Y1 = c(905L, 941L, 744L, 590L, 533L, 345L, 202L, 
369L, 200L, 80L, 200L, 80L, 50L, 30L, 60L, 20L, 30L, 30L), Y2 = c(774L, 
823L, 687L, 545L, 423L, 375L, 249L, 134L, 45L, 58L, 160L, 60L, 
20L, 40L, 20L, 26L, 19L, 27L), x = c(10L, 10L, 10L, 20L, 20L, 
20L, 40L, 40L, 40L, 50L, 50L, 50L, 70L, 70L, 70L, 90L, 90L, 90L 
)), .Names = c("Y1", "Y2", "x"), row.names = c(NA, -18L), class = "data.frame") 

df2 <- structure(list(Y3Line = c(384L, 717L, 914L, 359L, 241L, 265L, 
240L, 174L, 114L, 165L, 184L, 96L, 59L, 60L, 127L, 54L, 31L, 
44L), x = c(36L, 36L, 36L, 56L, 56L, 56L, 65L, 65L, 65L, 75L, 
75L, 75L, 85L, 85L, 85L, 99L, 99L, 99L)), .Names = c("A", 
"x"), row.names = c(NA, -18L), class = "data.frame") 

library(ggplot2) 
library(reshape2) 

df_l <- melt(df1, id.vars = "x") 

allLevels <- levels(factor(c(df_l$x,df2$x))) 
df_l$x <- factor(df_l$x,levels=(allLevels)) 
df2$x <- factor(df2$x,levels=(allLevels)) 

линии на х категории:

ggplot(data=df_l,aes(x = x, y =value))+geom_line(data=df2,aes(x = factor(x), y =A)) + 
geom_boxplot(aes(fill=variable)) 

Подключенные средства х категорий:

ggplot(data=df2,aes(x = factor(x), y =A)) + 
stat_summary(fun.y=mean, geom="line", aes(group=1)) + 
geom_boxplot(data=df_l,aes(x = x, y =value,fill=variable)) 
+0

Второй набор данных содержит два столбца новых результатов. Однако второй столбец «x» является одной и той же переменной в первом наборе данных. Мне удалось создать диаграмму первого набора данных. Мне нужно нарисовать простой линейный график (geom_line()) вторых данных и объединить его с графом boxplot. – SimpleNEasy

+0

Он дал вертикальную линию для каждой информации. Мне нужно иметь линию продолжения. Я знаю, так как у меня есть 3 значения «А» для каждого уникального значения х. Но, я думаю, я все еще могу его нарисовать (с помощью средней функции). – SimpleNEasy

+0

Euhm, вот что я делаю в последней части моего кода, нет? – JT85

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