2016-01-26 3 views
0

Как я могу наложить график рассеяния AverageTime2 против AverageCost и AverageTime1 по сравнению с AverageCost. (в ggplot)?Наложение двух графиков (ggplot)

Type<-c("a","b","c","d","e","f","g","h","i","j","k") 
AverageTime<-c(12,14,66,123,14,33,44,55,55,6,66) 
AverageTime2<-c(14,15,66,126,14,100,144,55,55,16,90) 
AverageCost<-c(100,10000,400,20000,500000,5000,700,800,400000,500,120000) 
AverageCost2<-c(10000,10000,4000,20000,5000,50000,7000,8000,40000,50000,120000) 
df<-data.frame(Type,AverageTime,AverageTime2,AverageCost,AverageCost2) 
+0

Расплавьте данные в длинный формат. У кого-нибудь есть хороший r-faq dupe для этого? – Gregor

+0

Возможный обман, хотя это более сложный случай: http://stackoverflow.com/q/1313954/903061 – Gregor

+1

Два слоя 'geom_point'. 'ggplot (data = df) + geom_point (aes (AverageCost, AverageTime), color = 'red') + geom_point (aes (AverageCost, AverageTime2), color = 'blue')' – alistaire

ответ

0

Вам нужно изменить свои данные так, чтобы AverageTime и AverageCost каждый столбец, с отдельной колонке (называется что-то вроде Type2), что отличает эти два типа.

Вы можете сделать это с dplyr, tidyr и stringr:

library(dplyr) 
library(tidyr) 
library(stringr) 

df_gather <- df %>% 
    gather(column, value, -Type) %>% 
    mutate(Type2 = str_detect(column, "2"), 
     column = str_replace(column, "2", "")) %>% 
    spread(column, value) 

Особенно важной частью этого процесса является собрать все «средние» столбцы в один столбец, а затем, чтобы отличить их (с помощью Type2 столбец), а затем разложить их обратно на отдельные столбцы AverageCost и AverageTime.

После этого, вы можете просто сделать:

ggplot(df_gather, aes(AverageTime, AverageCost, color = Type2)) + 
    geom_point() 

enter image description here

+0

Большое спасибо за вашу помощь. Я не понял, почему вы используете str_detect (столбец, «2»)? – shoorideh

+0

@ David Robinson, Также я хочу совместить эти два графика (AverageTime vs. AverageCost) и (AverageTime2 vs. AverageCost) – shoorideh

1

Вы можете просто строить свои данные как этот

df<-rbind(data.frame(Type,AverageTime,AT="T1",AverageCost,AverageCost2), 
      data.frame(Type,AverageTime=AverageTime2,AT="T2", 
        AverageCost,AverageCost2)) 

и построить его таким образом

library(ggplot2) 
ggplot(df)+geom_point(aes(AverageTime, AverageCost,color=AT)) 

enter image description here

+0

@ HubertL, Спасибо за ваше предложение, но я хочу совместить график AverageTime vs. AverageCost и AverageTime2 vs . AverageCost – shoorideh

+0

@shoorideh OK Отредактировано – HubertL

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