2013-12-05 4 views
1

Я хочу построить диаграмму рассеяния с верхним (0,40) и нижним пределом (0,32). Я хочу раскрасить значения между обоими пределами в черном, значения ниже нижнего предела в синем и значения выше верхнего предела красным.Colorize Scatterplot с верхним и нижним пределами

Вот мой код, где я Раскрашенная три различных периода:

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 

Кто-нибудь идея, как раскрасить границы вместо периодов?

Спасибо!

ответ

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=limit и scale_colour_manual к

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

EDIT: Если у вас есть пропущенные значения в переменной 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" 
+0

Это выглядит хорошо, но когда есть недостающие значения, он не работает – feder80

+0

perfect !!! Спасибо! – feder80

Смежные вопросы