我有温度和日期的数据,我使用函数hwmid和hwmi。我绘制了它,现在我只想给某些颜色着色,但只有当三个点满足条件时才会着色。
示例:我的限制为30,如果图表中的3个连续点超过30,则它们会显示红色。
我的整个公式:
library(extRemes)
library(in2extRemes)
lj <- read.table("C:/Users/matejaz/Desktop/hwmi/lj.csv", sep = ";", quote = "\"") #my data
tiid <- lj[,1]
jan1980 <- which(tiid == 19800101)
jan2003 <- which(tiid == 20030101)
dec2003 <- which(tiid == 20031231)
dec2011 <- which(tiid == 20111231)
Temp <- lj[jan2003:dec2003, 2]
Tref <- lj[jan1980:dec2011 , 2]
##hwmid calculation
hwmidLj2003 <- hwmid(1980, Tref, 2003, Temp)
hwmiLj2003 <- hwmi(1980, Tref, 2003, Temp)
T30y25p <- hwmidLj2003$T30y25p
T30y75p <- hwmidLj2003$T30y75p
range30y <- (T30y75p - T30y25p)
#daymag<-(Temp[214:225]-hwmidFr2003$T30ymin)/(hwmidFr2003$T30ymax-hwmidFr2003$T30ymin)
#### Heat Wave occurred in Carcassonne, France, 2003
split.screen( rbind( c(0, 1, 0.6, 1), c(0, 0.5, 0, 0.6), c(0.5, 1, 0, 0.6) ) )
screen(1)
par( mar = c(2, 2, 2, 0) )
plot( c(1:365), Temp[1:365], xlim = c(1, 365), ylim = c(-10, 50),
xlab = "", ylab = "", cex.axis = 1.1, col =ifelse(Temp[1:365]>hwmiLj2003$hwmi[1:365], "red", "black"), font.axis = 2) #plot my data with points
par( new = TRUE )
plot( c(1:365), hwmiLj2003$thr[1:365], type = "l",xlim = c(1, 365),
ylim = c(-10, 50), xlab = "", ylab = "", col = 1, lwd = 2, axes = FALSE) #plot treshold
我试图找到我的问题的答案,但不知怎的,我找不到任何东西。我可能没有尝试正确的关键字。如果有人知道这已经在某个地方得到解答/解释,你可以将我重定向到那里。
答案 0 :(得分:1)
因为您没有在plot命令之外指定case
,所以y
将被忽略。
试着举例:
y>30
BTW:
x=1:365 y=1:365 plot(x,y,col=ifelse(y>30, "red", "black"))
因为长度不同而不能工作。
编辑:
现在,这是一个使用for循环的解决方案。可能有更多的elegnat方式,但最终应该有效。
x=c(1:365), y=c(-10,50)