2013-11-12 2 views
2

Я хочу использовать R для построения двух рядов данных с одинаковыми значениями x (например, датами). Я хочу, чтобы две строки были на одном и том же графике, но сегменты, где один больше другого, должны быть другого цвета. Например, в качестве примера:Построение пересечений на линейных графиках в R

x<-c(-5:5) 
y1<-x^2-x-10 
y2<-(x^3)-(x^2)-(10*x)+2 
plot(x,y1,col="blue", ylim=c(-100,100), type="l") 
par(new=T) 
plot(x,y2,col="green", ylim=c(-100,100), type="l") 

с участками, где y2 больше y1, чтобы быть красным. Таким образом, зеленая линия будет красной больше или меньше где -3 < x < 1, а затем снова, когда x> 3 (я попытался опубликовать рисунок, но моя репутация недостаточно высока). Я хочу разработать немного кода, который позволит мне сделать это для любого набора данных, например, в виде матрицы-то вроде:

xy<-as.matrix(cbind(x,y1,y2)) 

У меня есть подозрение, что это может быть сделано с помощью for и if петли , но я предпочел бы более элегантное решение. Если бы я мог сделать что-то вроде этого: Show the intersection of two curves, как хорошо, это было бы здорово!

Большое спасибо за помощь!

ответ

2

Вот очень базисное решение достигается путем создания пары новой переменных, с NA значений для подавления черчения нежелательных регионов:

y2high <- y2 
y2high[y2high < y1] <- NA 
y2low <- y2 
y2low[y2low > y1] <- NA 

plot(x,y1,type='l', col='blue') 
lines(x,y2high,col='red') 
lines(x,y2low,col='green') 
Смежные вопросы