раскрасить plot в несколько цветов

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
Dryomys
Интересующийся
Сообщения: 32
Зарегистрирован: 24 ноя 2010, 12:41
Репутация: 3
Откуда: Пущино

раскрасить plot в несколько цветов

Сообщение Dryomys » 15 фев 2013, 17:03

Имеется вот такой plot. Нужно его раскрасить таким образом, чтобы линия графика под вертикальной линией (h=5) был одного цвета, а над ней другого. Пробовала через lines, но так и не придумала, как задать ей координату по y меньше или больше 5. Может, кто такое уже делал? Подскажите, как, пожалуйста!
Вложения
meteoWorms.jpeg
meteoWorms.jpeg (29.15 КБ) 5769 просмотров

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: раскрасить plot в несколько цветов

Сообщение SS_Rebelious » 15 фев 2013, 17:40

Воспользуйтесь пакетом ggpolt2. Добавьте к вашим данным колонку (пусть будет "column") в которой значениям, которые должны быть раскрашены в один цвет соответствовало одно и то же число (или слово). В опциях построения графика ggpot2 добавляете параметр colour = column. Например:
graphic <- ggplot(dataframe, aes(x = данные_по_иксу, y = данные_по_игреку) )
graphic + geom_line(aes(colour = column))
Что-то в этом роде.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
Dryomys
Интересующийся
Сообщения: 32
Зарегистрирован: 24 ноя 2010, 12:41
Репутация: 3
Откуда: Пущино

Re: раскрасить plot в несколько цветов

Сообщение Dryomys » 15 фев 2013, 17:56

спасибо)) Только это не совсем то.
Если бы мне один график надо было построить, я бы как-то так и сделала. Но у меня эти данные по температуре за несколько лет и графики нужны на каждый год (всего около 20ти), т.е. в каждом файле расставлять групповую принадлежность - это очень трудоемко. К тому же мне может и не 5 градусов нужно будет, а 10 или 0 или еще сколько-то.
Мне нужно как-то прописать условие, чтобы меньше пяти градусов одним цветом раскрашивались, а больше другим.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: раскрасить plot в несколько цветов

Сообщение gamm » 15 фев 2013, 18:33

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, то придется попотеть (в смысле применить брутфорс, поскольку заморачиваться не хочется) :mrgreen:

Код: Выделить всё

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)

Аватара пользователя
Dryomys
Интересующийся
Сообщения: 32
Зарегистрирован: 24 ноя 2010, 12:41
Репутация: 3
Откуда: Пущино

Re: раскрасить plot в несколько цветов

Сообщение Dryomys » 21 фев 2013, 21:37

Ого!
Большое спасибо! Буду осмыслять, как это устроено ))

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 22 гостя