Страница 1 из 1
раскрасить plot в несколько цветов
Добавлено: 15 фев 2013, 17:03
Dryomys
Имеется вот такой plot. Нужно его раскрасить таким образом, чтобы линия графика под вертикальной линией (h=5) был одного цвета, а над ней другого. Пробовала через lines, но так и не придумала, как задать ей координату по y меньше или больше 5. Может, кто такое уже делал? Подскажите, как, пожалуйста!
Re: раскрасить plot в несколько цветов
Добавлено: 15 фев 2013, 17:40
SS_Rebelious
Воспользуйтесь пакетом ggpolt2. Добавьте к вашим данным колонку (пусть будет "column") в которой значениям, которые должны быть раскрашены в один цвет соответствовало одно и то же число (или слово). В опциях построения графика ggpot2 добавляете параметр colour = column. Например:
graphic <- ggplot(dataframe, aes(x = данные_по_иксу, y = данные_по_игреку) )
graphic + geom_line(aes(colour = column))
Что-то в этом роде.
Re: раскрасить plot в несколько цветов
Добавлено: 15 фев 2013, 17:56
Dryomys
спасибо)) Только это не совсем то.
Если бы мне один график надо было построить, я бы как-то так и сделала. Но у меня эти данные по температуре за несколько лет и графики нужны на каждый год (всего около 20ти), т.е. в каждом файле расставлять групповую принадлежность - это очень трудоемко. К тому же мне может и не 5 градусов нужно будет, а 10 или 0 или еще сколько-то.
Мне нужно как-то прописать условие, чтобы меньше пяти градусов одним цветом раскрашивались, а больше другим.
Re: раскрасить plot в несколько цветов
Добавлено: 15 фев 2013, 18:33
gamm
Dryomys писал(а):Имеется вот такой plot. Нужно его раскрасить таким образом, чтобы линия графика под вертикальной линией (h=5) был одного цвета, а над ней другого.
поскольку это просто мурзилка, и точек много, заморачиваться не будем ...
Код: Выделить всё
p.X<-seq(1,20,by=0.1)
p.Y<-sin(p.X)*10
plot(p.X,p.Y,type="l",col="black",lwd=3)
p.ind<-(p.Y <= 5)
tmp.X<-p.X
tmp.X[p.ind]<-NA
lines(tmp.X,p.Y,col="red",lwd=3)
abline(5,0,col="gray",lty=2)
ежели среди потребителей найдутся тонкие ценители, которые увидят, то мы не совсем попали в 5, то придется попотеть (в смысле применить брутфорс, поскольку заморачиваться не хочется)
Код: Выделить всё
p.X<-seq(1,20,by=0.1)
p.Y<-sin(p.X)*10
p.n<-length(p.X)
for(i in 2:p.n) {
if((p.Y[i-1] >= 5 && p.Y[i] <= 5) || (p.Y[i-1] <= 5 && p.Y[i] >= 5) ) {
tmp.dy<-p.Y[i]-p.Y[i-1]
if(abs(tmp.dy) > 0) {
tmp.alpha<-(5-p.Y[i-1])/tmp.dy
p.X<-c(p.X,p.X[i-1]+tmp.alpha*(p.X[i]-p.X[i-1]))
p.Y<-c(p.Y,5)
}
}
}
p.ind<-order(p.X)
p.X<-p.X[p.ind]
p.Y<-p.Y[p.ind]
plot(p.X,p.Y,type="l",col="black",lwd=3)
p.ind<-(p.Y < 5)
tmp.X<-p.X
tmp.X[p.ind]<-NA
lines(tmp.X,p.Y,col="red",lwd=3)
abline(5,0,col="gray",lty=2)
Re: раскрасить plot в несколько цветов
Добавлено: 21 фев 2013, 21:37
Dryomys
Ого!
Большое спасибо! Буду осмыслять, как это устроено ))