我有一个带有斜率和截距的数据框来自一系列简单的线性回归。在绘制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, ... ))
但我无法弄清楚如何。
答案 0 :(得分:1)
事实证明,在您的情况下,您只有4种独特的clss
和ctg
组合,所以我只选择了一些随机颜色并修改了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")
产生这个: