Объединить непрерывную и дискретную цветовую шкалу в ggplot2? - PullRequest
10 голосов
/ 29 августа 2011

Я новичок в ggplot2. Я делаю точечный график, где точки окрашиваются на основе третьей непрерывной переменной. Однако для некоторых точек эта непрерывная переменная имеет либо значение Inf, либо значение NaN. Как я могу создать непрерывную шкалу, которая имеет специальный отдельный цвет для Inf и другой отдельный цвет для NaN?

Один из способов получить это поведение - подналожить данные и создать отдельный слой для особых точек, где установлен цвет. Но я бы хотел, чтобы в легенду вошли специальные цвета, и я думаю, что было бы чище избавиться от необходимости подгруппировать данные.

Спасибо! Uri

1 Ответ

12 голосов
/ 29 августа 2011

Я уверен, что это можно сделать более эффективным, но вот один из подходов.По сути, мы следуем вашему совету разбить данные на разные части, разделить непрерывные данные на отдельные корзины, затем соединить все вместе и использовать шкалу по нашему выбору.

library(ggplot2)
library(RColorBrewer)

#Sample data
dat <- data.frame(x = rnorm(100), y = rnorm(100), z = rnorm(100))
dat[sample(nrow(dat), 5), 3] <- NA
dat[sample(nrow(dat), 5), 3] <- Inf

#Subset out the real values
dat.good <- dat[!(is.na(dat$z)) & is.finite(dat$z) ,]
#Create 6 breaks for them
dat.good$col <- cut(dat.good$z, 6)

#Grab the bad ones
dat.bad <- dat[is.na(dat$z) | is.infinite(dat$z) ,]
dat.bad$col <- as.character(dat.bad$z)

#Rbind them back together
dat.plot <- rbind(dat.good, dat.bad)

#Make your own scale with RColorBrewer
yourScale <- c(brewer.pal(6, "Blues"), "red","green")

ggplot(dat.plot, aes(x,y, colour = col)) + 
  geom_point() +
  scale_colour_manual("Intensity", values = yourScale)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...