2016-05-12 4 views
0

はのは、私は単純なデータフレームを持っているとしましょう:並べ替え伝説

> 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を使用して、次のコードを使用してプロットしていますが、今度は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'とは別の2番目の呼び出しで、' + geom_line(data = subset(Amelt、変数== "b")、aes(x = x、y =値、色=可変)、サイズ= 1.1) ' – aosmith

+0

ありがとう、aosmith。それはうまくいくはずです! –

+0

「b」にハードコードされているのではなく、最後の変数に関連するようにするだけです:+ geom_line(data = subset(Amelt、変数== Amelt $変数[nrow(Amelt)])、aes(x = x 、y = value、color = variable)、size = 1.1) ' –

答えて

0

scale_fill_discrete(改行= c( "a"、 "d"、 "b"))を使用してプロットの凡例を指定してみましたか?

このリンクを見てください: http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/

は、この情報がお役に立てば幸い!

+0

チップ、sachinvありがとう。しかし、scale_fill_discrete(breaks = c( "a"、 "d"、 "b"))を追加しても機能しません。伝説はまだアルファベット順です。 –

関連する問題