geom_ribbon中可能存在的错误

时间:2012-10-28 04:57:19

标签: r ggplot2

我希望绘制两个时间序列,并根据当时哪个系列更大来遮蔽系列之间的空间。

这里有两个系列 - 首先是一个数据框,其中包含当时较大系列较大的指标

d1 <- read.csv("https://dl.dropbox.com/s/0txm3f70msd3nm6/ribbon%20data.csv?dl=1")

这是融化的系列。

d2 <- read.csv("https://dl.dropbox.com/s/6ohwmtkhpsutpig/melted%20ribbon%20data.csv?dl=1")

我的情节...

ggplot() + geom_line(data = d2,
                 aes(x = time, y = value, group = variable, color = variable)) +
         geom_hline(yintercept = 0, linetype = 2) +
         geom_ribbon(data = d1[d1$big == "B",],
                     aes(x = time, ymin = csa, 
                         ymax =  csb),
                         alpha  = .25,
                         fill = "#9999CC") +
         geom_ribbon(data = d1[d1$big == "A",],
                     aes(x = time, ymin = csb, 
                         ymax =  csa),
                     alpha  = .25,
                     fill = "#CC6666") +
         scale_color_manual(values = c("#CC6666" , "#9999CC"))

导致......

the resulting plot

为什么情节中间会出现多余的蓝色乐队?

1 个答案:

答案 0 :(得分:8)

这是一个解决方案。我将第一个data = d1[d1$big == "B",]函数中的geom_ribbon替换为:

data = rbind(d1[d1$big == "B",],
             d1[c((which(diff(as.numeric(d1$big)) == -1) + 1),
                  (which(diff(as.numeric(d1$big)) == 1))), ])

这是必要的,因为d1$big == "B"序列的第一行和最后一行通常包含不同的csacsb值。结果,有一条连接数据的可见色带。上面的命令使用之前的最后一行和这些序列之后的第一行以及第一个功能区的数据。 d1$big == "A"(第二个功能区的基础)不存在此问题。

完整的代码:

ggplot() +
 geom_line(data = d2,
           aes(x = time, y = value, group = variable, color = variable)) +
 geom_hline(yintercept = 0, linetype = 2) +
 geom_ribbon(data = rbind(d1[d1$big == "B",],
                          d1[c((which(diff(as.numeric(d1$big)) == -1) + 1),
                               (which(diff(as.numeric(d1$big)) == 1))), ]),
             aes(x = time, ymin = csa, ymax =  csb),
             alpha  = .25, fill = "#9999CC") +
 geom_ribbon(data = d1[d1$big == "A",],
             aes(x = time, ymin = csb, ymax =  csa),
             alpha  = .25, fill = "#CC6666") +
 scale_color_manual(values = c("#CC6666" , "#9999CC"))

enter image description here