如何在不同的失败率下保持ggplot中的一致着色?

时间:2017-02-06 20:12:31

标签: r ggplot2

我有一个像这样的数据框

Datetime <- c("2015-09-29 08:22:00", "2015-09-29 09:45:00", "2015-09-29 09:53:00", "2015-09-29 10:22:00", "2015-09-29 10:42:00",
              "2015-09-29 11:31:00", "2015-09-29 11:47:00", "2015-09-29 12:45:00", "2015-09-29 13:11:00", "2015-09-29 13:44:00",
              "2015-09-29 15:24:00", "2015-09-29 16:28:00", "2015-09-29 20:22:00", "2015-09-29 21:38:00", "2015-09-29 23:34:00")

FailRate <- c(7,4,5.5,6,13,7.6,6.4,15.5,4.6,13.3,9.7,8.4,5.1,1.6,1.3)

df <- data.frame(Datetime,FailRate)
df$Datetime <- as.POSIXlt(df$Datetime)

我提供以下输入

UCL <- 11
limits = c(UCL)
lbls   = c('UCL')

我尝试根据UCL,上限控制

绘制此数据框
library(ggplot2)
library(gridExtra)
library(ggplot2)
library(scales)
ggplot(data = df,aes(x=Datetime,y=FailRate)) + 
  theme(axis.text=element_text(size=14), axis.title=element_text(size=14,face="bold")) +
  theme(plot.title=element_text(face="bold", size=15)) +
  geom_line(size = 0.5) +  ylab("Tool Fail Rate (%)") +                      
  geom_point(alpha=0.6, position=position_jitter(w=0.05, h=0.0), aes(colour=(FailRate<UCL)), size=3) +
  geom_hline(aes(yintercept=limits,linetype=lbls)) +            
  geom_text(aes(y=limits,x=df$Datetime[15],label=paste("Rate Limit= ",round(limits, 3)),hjust=0.42,vjust=1.5)) +
  scale_x_datetime(breaks = date_breaks("1 day"),labels = date_format("%m/%d"))

我得到以下情节,红色表示失败超过速率限制,绿色表示失败低于速率限制

enter image description here

如果我将我的UCL增加到21,那么我得到这个情节

enter image description here

尽管失败率低于限额,但它们仍然显示为红色。我需要图表一致

Color = Green for Failures below Rate Limit 
Color = Red for Failures above Rate Limit 

我该如何自定义?

我试图加入scale_colour_gradient(low = "red"),但它给我一个错误

有人可以提供一些指导方法吗?

2 个答案:

答案 0 :(得分:3)

添加

 scale_colour_manual(values = c("TRUE" = "red","FALSE" = "blue"))

应该这样做。

答案 1 :(得分:0)

你应该尝试用条件语句创建一个调色板:

pal = ifelse(FailRate< 21,'green','red')

这应该在这里替换:

  geom_point(alpha=0.6, position=position_jitter(w=0.05, h=0.0), aes(colour=pal), size=3) +

通过这种方式设置代码,您可以根据您正在评估的条件动态设置颜色。 如果需要,您甚至可以将其设置为以某种方式自动调整:

newRate<- max(oldRate)*.5 #any equation here would work function creating  thresholds dynamically.

pal <- ifelse(FailRate< newRate,'green','red')