我有一个像这样的数据框
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"))
我得到以下情节,红色表示失败超过速率限制,绿色表示失败低于速率限制
如果我将我的UCL增加到21,那么我得到这个情节
尽管失败率低于限额,但它们仍然显示为红色。我需要图表一致
Color = Green for Failures below Rate Limit
Color = Red for Failures above Rate Limit
我该如何自定义?
我试图加入scale_colour_gradient(low = "red")
,但它给我一个错误
有人可以提供一些指导方法吗?
答案 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')