我知道我可以通过更改分组因子的levels
来切换线条绘制顺序(即,哪条线被绘制为第1,第2,第3 ......)。但是,这样做也会切换ggplot图例的顺序。
如何更改绘图顺序但保留原始图例顺序?
示例
给出以下data.frame:
dat <- data.frame(id = rep(factor(letters[1:3]),3), y = c(1:3,3,2,1,1,3,1), x = rep(1:3,each = 3))
我可以通过更改levels
因素的id
来切换线路绘图顺序:
dat$id = relevel(dat$id, 'c')
重新排序级别。对原始和ggplot
数据使用以下relevel
代码:
library(ggplot2)
#Create coloring objects to kep color consistent:
cols <- rep(1:3,3)
names(cols) <- letters[1:3]
#Create line graph:
ggplot(dat,aes(x=x,y=y,color=id)) + geom_line(size = 2) +
scale_colour_manual('id',values=cols) ##set custom static coloring
生成以下2个图表:
左:因子id
|的原始级别顺序右:使用relevel
请注意,这些行已成功重新排序:行c
从最后打印(因此在顶部)到最先打印(因此在底部)。
然而,图例也改变了顺序!
如何保留左侧图表中的图例顺序,但修改行式打印顺序以匹配右侧图形的顺序?
答案 0 :(得分:1)
您现在可能已经找到了解决方案。刚刚看到这个问题仍然“未得到回答”,并在此基于@Hendrik的评论提出了一个建议-很有帮助,但不是整个解决方案(他的代码给出了图2)
dat$id2 = relevel(dat$id, 'c') # just create a dummy column with the releveled factors
ggplot(dat) +
geom_line(aes(x = x, y = y, color = id2), size = 2) +
# use your dummy column for the line order
scale_colour_manual('id',values = cols, breaks = levels(dat$id))
# use @Hendriks break suggestion