2016-01-26 90 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

將您的數據融入長格式。任何人都有一個很好的常見問題欺騙? – 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

你需要重塑你的數據,這樣的平均時間和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

@大衛羅賓遜,我也想重疊這兩個情節(平均時間與平均成本)和(平均時間2與平均成本) – 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,感謝您的建議,但我想重疊的平均時間與平均成本和平均時間2 vs 。AverageCost – shoorideh

+0

@shoorideh確定編輯 – HubertL