2013-11-19 3 views
0

Это последующий пост here.R/ggplot2 facet_grid duplicate все datapoints everwhere

Я пытаюсь создать граненый сюжет с данными подмножества в соответствии с приведенным ниже кодом. Таким образом, из моего стола я хотел бы рассчитать цену продукта P3 по сравнению с ценой продукта P1 и грань сюжета в сравнении с версией и цветом.

Факел как-то не работает с приведенным ниже кодом, вместо этого все точки данных просто дублируются в каждом аспекте. Любая идея о том, как это исправить? И получить «желаемый сюжет», который я прикрепляю ниже (вручную взломанный)?

library(ggplot2) 
product=c("p1","p1","p1","p1","p1","p1","p1","p1","p2","p2","p2","p2","p2","p2","p2","p2","p3","p3","p3","p3","p3","p3","p3","p3","p4","p4","p4","p4","p4","p4","p4","p4") 
skew=c("b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a") 
version=c(0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2) 
color=c("C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2") 
price=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) 
df = data.frame(product, skew, version, color, price) 
# First plot all the data 
p1 <- ggplot(df, aes(x=price, y=price, colour=factor(skew))) + geom_point(size=2, shape=19) 
p1 <- p1 + facet_grid(version ~ color, labeller = label_both, , scales="free") 
p1 
# Second, plot P3 prices vs P1 prices 
p2 <- ggplot(df, aes(x=price[product=='p1'], y=price[product=='p3'], colour=factor(skew[product == 'p1']))) + geom_point(size=2, shape=19) 
p2 <- p2 + facet_grid(version ~ color, labeller = label_both, , scales="free") 
p2 

желаемая участок Шоуда был:

Desired plot

Вместо этого, это то, что я получаю This is what I get

ответ

2

Это происходит потому, что, как я уже говорил в последний вопрос, вы не должны не следует полагаться на подмножество переменных внутри aes(). Вы должны сделать это:

library(reshape2) 
df1 <- dcast(df,skew+version+color~product, 
      fun.aggregate = sum, 
      value.var = "price") 
ggplot(df1,aes(x = p1,y = p3,colour = factor(skew))) + 
    facet_grid(version~color) + 
    geom_point(size = 2,shape = 19) 
+0

Yup @joran, это сработало отлично! Фактически, мои данные были немного сложнее, чем этот простой пример. Поэтому мне пришлось обрезать мой стол и просто предложить код! – Riad

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