在ggplot2中结合连续和离散色标?

时间:2011-08-28 21:18:46

标签: r ggplot2 visualization

我是ggplot2的新手。我正在制作散点图,其中点基于第三个连续变量着色。但是,对于某些点,该连续变量具有Inf值或NaN。如何为Inf生成具有特殊单独颜色的连续刻度,为NaN生成另一种单独颜色?

获得此行为的一种方法是对数据进行子集化,并为设置颜色的特殊点创建单独的图层。但我也希望特殊的颜色能够进入传奇,并认为消除数据子集的需要会更加清晰。

谢谢! URI

1 个答案:

答案 0 :(得分:12)

我确信这可以提高效率,但这是一种方法。基本上,我们遵循您的建议,将数据子集化到不同的部分,将连续数据划分为离散的箱,然后将所有内容重新组合在一起并使用我们自己选择的比例。

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