在ggplot中修改折线图的特定线时重新排序图例

时间:2016-05-12 19:59:40

标签: r ggplot2

假设我有一个简单的数据框,如下所示:

> A <- data.frame(x=1:10, a=rep(1,10), d=rep(2,10), b=rep(3,10))
> A
    x a d b
1   1 1 2 3
2   2 1 2 3
3   3 1 2 3
4   4 1 2 3
5   5 1 2 3
6   6 1 2 3
7   7 1 2 3
8   8 1 2 3
9   9 1 2 3
10 10 1 2 3

我想在x轴上用x绘制这个,而在y轴上绘制其他列。我希望代表最终列的线比其他线稍厚。所以我可以使用以下代码执行此操作,这将导致下面显示的图:

library(ggplot2)
#Plot that creates a thicker line for last column of data.
#However, order of legend is changed to alphabetical order.
p <- ggplot(A, aes(x))
for(i in 2:length(A)){
  gg.data <- data.frame(x=A$x, value=A[,i], name=names(A)[i])
  if(i==length(A)){
    p <- p + geom_line(data=gg.data, aes(y=value, color=name), size=1.1)
  } else{
    p <- p + geom_line(data=gg.data, aes(y=value, color=name))
  }
}

enter image description here

现在上面绘图的问题是图例中变量的顺序已更改为与字母顺序对齐。我不想那样;相反,我希望订单保持adb

我可以使用melt按照我的意愿保留订单,然后使用下面的代码进行绘图,但现在我看不到如何增加代表{{1}中最后一列的行的大小}。

A

enter image description here

我怎样才能得到我想要的东西?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用 scale_fill_discrete(breaks = c(“a”,“d”,“b”))来指定图表的图例。

请看一下这个链接: http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/

希望这有帮助!