【问题标题】:Overlaying plots with a horizontal date in R在R中用水平日期覆盖图
【发布时间】:2015-11-23 14:15:04
【问题描述】:

我试图使用 ggplot2 叠加两个图,我可以单独绘制它们,但我想叠加它们以显示比较。它们具有相同的 y 轴。 y 轴是从 0 到 100 的分数,x 轴是一个月中的特定日期(范围为 3 周)

这是我尝试过的:

data <- read.table(text = Level5avg, header = TRUE)
data2 <- read.table(text = Level6avg, header = TRUE)
colnames(data) = c("x","y")
colnames(data2) = c("x","y")
ggplot(rbind(data.frame(data2, group="a"), data.frame(data, group="b")), aes(x=x,y=y)) + 
          stat_density2d(geom="tile", aes(fill = group, alpha=..density..), contour=FALSE) + scale_fill_manual(values=c("b"="#FF0000", "a"="#00FF00")) + geom_point() + theme_minimal()

当我这样做时,我得到一个包含多个点的奇怪图表,但我不确定我的代码是否正确,因为我无法区分数据。如果可能的话,我想在图中再添加 3 个(小)数据集。如果可能的话,如何将其制成折线图以区分数据集?


注意:由于this 帖子(以及该网站上的其他几篇帖子建议使用 ggplot 而不是 Lattice),我的印象是 ggplot 可以为我的目的工作。我不确定我想要的是否可能,所以我来到了这里。

数据集:

dput(data) structure(list(x = structure(1:6, .Label = c("10/27/2015",     
"10/28/2015", 
"10/29/2015", "10/30/2015", "10/31/2015", "11/1/2015"), class = "factor"), 
y = c(0, 12.5, 0, 0, 11, 43)), .Names = c("x", "y"), class = "data.frame",      
row.names = c(NA, -6L))

dput(data2) structure(list(x = structure(1:3, .Label 
=c("10/28/2015","10/31/2015", 
"11/1/2015"), class = "factor"), y = c(0, 0, 41.5)), .Names = c("x", 
"y"), class = "data.frame", row.names = c(NA, -3L))

我现在已经设法获得了我的叠加层,但是有没有办法组织水平轴?日期没有顺序。

【问题讨论】:

  • 查看数据会很有用。使用dput(data)

标签: r plot ggplot2


【解决方案1】:

在我看来,您基于图的答案使用了对您的数据无用的密度图。如果您只是在寻找一些带点的线图,您可以执行以下操作(请注意,我在 ggplot() 调用之外创建了一个数据框以使其看起来更清晰):

data$group <- "b"
data2$group <- "a"
df <- rbind(data2,data)
df$x <- as.Date(df$x,"%m/%d/%Y")
ggplot(df,aes(x=x,y=y,group=group,color=group)) + geom_line() + 
  geom_point() + theme_minimal()

请注意,通过转换日期,日期会自行以正确的顺序结束。

【讨论】:

  • rbind 的有趣使用,有没有办法按时间顺序排列日期?
  • 我添加了as.Date() 来转换日期。一旦它们的格式正确,ggplot() 就会自动将它们按正确的顺序排列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多