ggplot2中geom_step中的行边框

时间:2014-05-01 11:30:54

标签: r ggplot2

我之前没有问过这个问题,如果我没有提供足够详细的需要/解释,请原谅我。我在geom_step中使用ggplot2来尝试为具有两个单独的两级因子(编码为单个四级因子)的数据生成步长曲线。我希望第一个因素(在下面,A对B)用颜色表示,第二个因子(在下面,1对2)用线填充表示,即填充与白色。这是我正在寻找的一个经过编辑的模型: enter image description here

是否可以在geom_step中为ggplot2构建的行添加边框?

如果没有,我是否可以使用较小的线宽和不同的颜色覆盖第二条geom_step线以“手动”添加线条填充?我尝试在scale_colour_manual术语中添加另一个不同颜色的geom_step,但这只是复制了第一个geom_step曲线并返回消息“Scale for'color'已经存在。添加另一个缩放'颜色',将取代现有规模。“

示例代码如下。

events <- rep(c(0,1,2,3,4),4)
individual <- (as.factor(rep(c("A1","A2","B1","B2"),each=5)))
step <- c(1,2,3,4,5,3,4,5,6,7,5,6,7,8,9,7,8,9,10,11)
df <- data.frame(events,individual,step)

ggplot(df, aes(x=events, group=individual, colour=individual, y=step)) + 
  geom_step(size=1.8) +
  scale_colour_manual(values=c("green2","green2", "orange", "orange"), name="Individual")

1 个答案:

答案 0 :(得分:1)

这不是一个完整的解决方案:

通过添加另一个geom_step命令添加白色条带相当容易:

events<-rep(c(0,1,2,3,4),4)
individual<-(as.factor(rep(c("A1","A2","B1","B2"),each=5)))
step<-c(1,2,3,4,5,3,4,5,6,7,5,6,7,8,9,7,8,9,10,11)
filled <- rep(c(FALSE,TRUE),each=5)

data_frame<-data.frame(events,individual,step,filled)
ggplot(data_frame, aes(x=events, group=individual, colour=individual, y=step)) + 
geom_step(size=1.8) +
scale_colour_manual(values=c("green2","green2", "orange", "orange"), name="Individual") +
geom_step(data=df[df$filled,], size=1.1, colour="white")

ggplot with line border

不幸的是,我不确定如何使传说符合这一点。

更容易的替代方案是使一些线条更轻。您可以定义lighten_colour函数:

lighten_colour <- function(colour, lightness=0.5) {
    # lightness should be between 0 and 1
    white <- col2rgb("white") / 255
    colour <- col2rgb(colour) / 255
    rgb(t(white*lightness + colour*(1-lightness)))
}

...并将其用于绘图颜色。

ggplot(data_frame, aes(x=events, group=individual, colour=individual, y=step)) + 
geom_step(size=1.8) +
scale_colour_manual(values=c(lighten_colour("green2"),
                             "green2",
                             lighten_colour("orange"),
                             "orange"),
                    name="Individual")

ggplot with lighter colours