使用特定的配色方案一次绘制几个下划线

时间:2013-12-04 16:16:05

标签: r plot visualization

我有一个带有斜率和截距的数据框来自一系列简单的线性回归。在绘制abline时,我想使用特定于类和类别的所有可能组合的颜色编码。

假设数据框如下所示:

(intercept  <-  rnorm(n = 40, mean = 1, sd = 0.25))
(slope      <-  rnorm(n = 40, mean = 2, sd = 1))
(clss       <-  c(rep("a", 20), rep("b", 20)))
(ctg        <-  c(rep("mm", 10), rep("nn", 10), rep("mm", 10), rep("nn", 10)))
df          <-  data.frame(intercept, slope, clss, ctg)

我设法使用以下方式绘制所有abline

plot(1, type="n", axes=FALSE, xlab="", ylab="", xlim=c(0, 10), ylim=c(0, 10))
mapply(abline, df$intercept, df$slope)

我希望在clss=="a"ctg=="mm"时将这些行全部用绿色表示,并为其他clss * ctg组合使用不同的颜色。 可能这样的事情会起作用:

by(df, paste(df$clss, df$ctg), mapply(abline, ... ))

但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:1)

事实证明,在您的情况下,您只有4种独特的clssctg组合,所以我只选择了一些随机颜色并修改了mapply

# get colour for each combination
x <- sample(colours(), length(unique(paste0(df$clss, df$ctg)))) 
# how many of each combination are there
q <-  aggregate(df$intercept, by=list(paste0(df$clss, df$ctg)), length)
# make a colour vector
mycols <- rep(x, q[,2])


mapply(function(x,y,z) { abline(x, y, col=z) }, 
       df$intercept, df$slope, 
       as.list(mycols) )

#You could obviously pick the colours yourself or choose a gradient

答案 1 :(得分:1)

使用ggplot

library(ggplot2)
gg       <- df
gg$color <- paste(gg$clss,".",gg$ctg,sep="")
ggplot(gg) +
  geom_point(aes(x=-10,y=-10,color=color)) +   # need this to display a legend...
  geom_abline(aes(slope=slope, intercept=intercept, color=color)) +
  xlim(0,10) + ylim(0,10) + labs(x="X",y="Y")

产生这个: