2016-05-12 1 views
0

Допустим, у меня есть простой кадр данных, как показано ниже:Реорганизация легенда, модифицируя одну конкретную линию для линейного графика в ggplot

> 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 на оси х, а другой столбцы как линии по оси 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

Теперь проблема с выше сюжетом, что порядок переменных в легенде изменился для выравнивания в алфавитном порядке. Я не хочу этого; вместо этого я хочу, чтобы заказ оставался a, d, b.

Я могу сохранить заказ, как я желаю, используя melt, а затем прорисовывая рисунок, используя следующий код, но теперь я не вижу, как увеличить размер строки, представляющей последний столбец, в A.

Amelt <- melt(A, id.vars='x') 
#Plot that orders legend according to order of columns in data frame. 
#However, not sure how to thicken one particular line over the others. 
pmelt <- ggplot(Amelt)+geom_line(aes(x=x, y=value, color=variable)) 

enter image description here

Как я могу получить и то, что я хочу?

+0

Вы можете добавить строку для группы интересов во втором отдельном вызове 'geom_line':' + geom_line (data = subset (Amelt, variable == "b"), aes (x = x, y = значение, цвет = переменная), size = 1.1) ' – aosmith

+0

Спасибо, aosmith. Это должно сработать! –

+0

Просто, чтобы сделать его релевантным для последней переменной вместо жестко-кодированного значения «b»: '+ geom_line (data = subset (Amelt, variable == Amelt $ variable [nrow (Amelt)]), aes (x = x , y = значение, цвет = переменная), size = 1.1) ' –

ответ

0

Вы пробовали использовать scale_fill_discrete (breaks = c ("a", "d", "b")), чтобы указать легенды для участков.

Пожалуйста, смотрите по этой ссылке: http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/

Надежда это помогает!

+0

Спасибо за подсказку, sachinv. Но добавление scale_fill_discrete (breaks = c ("a", "d", "b")) не работает. Легенда по-прежнему в алфавитном порядке. –

Смежные вопросы