2011-08-28 97 views
10

我是ggplot2新手。我正在绘制散点图,点基于第三个连续变量着色。但是,对于某些点,该连续变量具有Inf值或NaN。我怎样才能生成一个连续的比例尺,这个连续比例尺对Inf来说有独特的颜色,对NaN来说又是另外一种颜色?在ggplot2中结合连续和离散色阶?

获得此行为的一种方法是对数据进行子集化,并为设置颜色的特殊点创建单独的图层。但我希望特殊的颜色也可以进入图例,并且认为不需要对数据进行子集化就会更清晰。

谢谢! Uri

回答

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

+0

为什么'DAT $ COL [is.finite(DAT $ Z)] < - 切(DAT $ Z [is.finite(DAT $ Z)],6)'未能工作?而不是获取间隔标签,我只是得到整数... –

+0

@Uri - 我遇到了同样的问题,因此沿着从好坏中分离出“好”值的路径,然后将它们绑定在一起。我猜这是因为当你试图一次完成它时,这些因素被转换为相应的数字......虽然我承认没有花太多时间试图迫使它工作,因为我想出了解决方案。 – Chase

相关问题