簡體   English   中英

覆蓋兩個圖(ggplot)

[英]Overlay two plots (ggplot)

我如何疊加AverageTime2 vs.AverageCost和AverageTime1 vs.AverageCost的散點圖。 (在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)

您可以像這樣簡單地構建數據

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))

在此處輸入圖片說明

您需要調整數據的形狀,以使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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM