【问题标题】:Overlay two plots (ggplot)叠加两个图(ggplot)
【发布时间】:2016-01-26 20:36:38
【问题描述】:

如何叠加 AverageTime2 与 AverageCost 以及 AverageTime1 与 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)

【问题讨论】:

  • 将您的数据合并为长格式。有人对此有很好的 r-faq 欺骗吗?
  • 可能的欺骗,虽然这是一个更复杂的情况:stackoverflow.com/q/1313954/903061
  • 两个geom_point 层。 ggplot(data = df) + geom_point(aes(AverageCost, AverageTime), color = 'red') + geom_point(aes(AverageCost, AverageTime2), color = 'blue')
  • @alistaire,感谢您的建议。我怎样才能拥有 geom_smooth() 曲线?另外我怎样才能表明颜色是指哪个变量?
  • + geom_smooth( ... )。传说对这种方法更加挑剔;按照以下答案的建议,重塑您的数据可能更容易。

标签: r plot ggplot2


【解决方案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))

【讨论】:

  • @HubertL,感谢您的建议,但我想将 AverageTime 与 AverageCost 和 AverageTime2 与 AverageCost 的图重叠
  • @shoorideh OK 已编辑
【解决方案2】:

您需要重新调整数据,使 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)

其中特别重要的部分是将所有“Average”列收集到一列中,然后区分它们(使用Type2 列),然后将它们分散到单独的AverageCost 和AverageTime 列中。

之后,您可以简单地执行以下操作:

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

【讨论】:

  • 非常感谢您的帮助。我不明白你为什么使用 str_detect(column, "2") ?
  • @David Robinson,我也想重叠这两个图(AverageTime vs. AverageCost)和(AverageTime2 vs. AverageCost)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多