使用上限和下限着色散点图

时间:2013-12-05 07:16:49

标签: r limits

我想绘制一个上限(0.40)和下限(0.32)限制的散点图。我希望将两个限制之间的值着色为黑色,将下限值设置为蓝色,将值设置为高于上限的值为红色。

这是我的代码,我将三个不同的时段着色:

d_ply(Q, .(Actor), function(p){
  ggplot(p, aes(x = Date, y = BACE, colour=Period))+
  geom_point(shape=15)+scale_colour_manual(values=c("#000000", "#CC0000", "#0066FF"))+
  ylim(0,0.6)+
  geom_hline(yintercept=0.32, linetype="dotdash")+
  geom_hline(yintercept=0.40, linetype="dotdash")+
  theme(legend.position = "none", panel.background = element_rect(fill = "#FFFFFF",  colour="#000000"), panel.grid.major = element_line(colour = "grey", linetype = "dotted")) +
  facet_grid(.~ Period, scales="free", space="free")+
  ggtitle(unique(p$Actor))+
  ggsave(file = paste0("lta_",unique(p$Actor),"_BACE", ".pdf"))
})

这是数据集:

Date    Actor   BACE    Period
 1Q1    Ar  0,3448  P1
 1Q2    Ar  0,3096  P1
 1Q3    Ar  0,2771  P2
 1Q4    Ar  0,2412  P2
 2Q1    Ar  0,3291  P2
 2Q2    Ar  0,1575  P2
 2Q3    Ar  0,3072  P2
 2Q4    Ar  0,3252  P2
 3Q1    Ar  0,3138  P2
 3Q2    Ar  0,3241  P3
 3Q3    Ar  0,2867  P3
 3Q4    Ar  0,2587  P3
 4Q1    Ar  0,2983  P3
 4Q2    Ar  0,2933  P3
 4Q3    Ar  0,237   P3
 4Q4    Ar  0,2788  P3
 1Q1    Bu  0,3977  P1
 1Q2    Bu  0,3844  P1
 1Q3    Bu  0,3642  P2
 1Q4    Bu  0,3744  P2
 2Q1    Bu  0,3695  P2
 2Q2    Bu  0,3451  P2
 2Q3    Bu  0,3466  P2
 2Q4    Bu  0,3395  P2
 3Q1    Bu  0,3738  P2
 3Q2    Bu  0,3701  P3
 3Q3    Bu  0,3736  P3
 3Q4    Bu  0,3435  P3
 4Q1    Bu  0,3559  P3
 4Q2    Bu  0,3695  P3
 4Q3    Bu  0,4223  P3
 4Q4    Bu  0,4538  P3

有谁知道如何着色限制而不是句点?

谢谢!

1 个答案:

答案 0 :(得分:2)

在您的数据中创建新变量limit可能最简单,您可以在其中保存必要的因素。然后您可以将功能更改为color=limit

Q[, "limit"] <- factor("below", levels=c("below", "between", "above"))
Q[Q[, "BACE"]>=0.32, "limit"] <- "between"
Q[Q[, "BACE"]>=0.4, "limit"] <- "above"

然后您只需将color=limitscale_colour_manual更改为

即可
scale_colour_manual(values=c(between="#000000", above="#CC0000", below="#0066FF")) 

编辑:如果您在BACE变量中缺少值,则可以将代码更改为以下内容:

Q[!is.na(Q[, "BACE"]), "limit"] <- factor("below", 
                                          levels=c("below", "between", "above"))
Q[which(Q[, "BACE"]>=0.32), "limit"] <- "between"
Q[which(Q[, "BACE"]>=0.4), "limit"] <- "above"