2017-09-01 6 views
0

私は文脈を提供するために次のコードを嘲笑しました。機能、シーケンス間隔、名前、および色はすべて任意です。ここで多層ggplot2プロットのための任意の凡例の順序を作成します

library(ggplot2) 

function1 <- function(input) { 
    input * 3 
} 

function2 <- function(input) { 
2 * input + 1 
} 

function3 <- function(input) { 
    input + 4 
} 

x1 <- seq(1, 10, 0.1) 
x2 <- seq(1, 10, 0.2) 
x3 <- seq(1, 10, 0.5) 

y1 <- sapply(x1, function1) 
y2 <- sapply(x2, function2) 
y3 <- sapply(x3, function3) 

data1 <- data.frame(x1, y1) 
data2 <- data.frame(x2, y2) 
data3 <- data.frame(x3, y3) 

ggplot() + 
    geom_point(data = data1, aes(x1, y1, color = "B")) + 
    geom_point(data = data2, aes(x2, y2, color = "C")) + 
    geom_point(data = data3, aes(x3, y3, color = "A")) + 
    scale_color_manual(name = "Functions", 
        values = c("B" = "Green", "C" = "Red", 
           "A" = "Blue")) + 
    xlab("X") + 
    ylab("Y") 

は、得られたプロットのスクリーンショットです:

enter image description here

は、このoneなど伝説の順序で同様の問題に対処するいくつかの以前に答えた質問がありますが、どれも対処するように見えるん多層プロットで。このquestionは、バージョン0.9.2の凡例の順序を扱いますが、ggplot2 is currently on version 2.2.1です。さらに、それは昇順または降順のみを扱うようです。

凡例の値の順序をカスタマイズする方法があるかどうかをご確認ください。たとえば、凡例では、A、B、Cの代わりにB、C、Aとして表示できますか?

+0

あなたが機能を実行するために、 'sapply'は必要ありません。あなたは 'y1 = function1(x1)'などを行うことができます。 – eipi10

+0

チップをありがとう。私はRのことがかなり新しいので、まだ物事を考え出しています。 – arbitrarystringofletters

答えて

3

"ggplot2方法"は、データを長い形式に変更する(または最初に長い形式で作成する)ことです。そして、あなたはgeom_pointへのコールを1つだけ必要とし、あなたは、関数を注文する要因列を作成することができます

dat = data.frame(X=c(x1,x2,x3), 
       Y=c(y1,y2,y3), 
       Functions=rep(LETTERS[1:3], sapply(list(x1,x2,x3), length))) 

dat$Functions = factor(dat$Functions, levels=c("B","C","A")) 

ggplot(dat, aes(X, Y, colour=Functions)) + 
    geom_point() + 
    scale_color_manual(values=c(B="green", C="red", A="blue")) 

enter image description here

UPDATE:コメントを受けて、あなたがablineを追加したい場合は、以下のコードを使用することができます。ただし、これにより、カラー凡例に新しいキー値が追加されるだけでなく、他の3つの凡例キーに対角線が追加されます。

ggplot(dat, aes(X, Y, colour=Functions)) + 
    geom_point() + 
    scale_color_manual(values=c(B="green", C="red", A="blue", `My Abline`="black")) + 
    geom_abline(aes(intercept=0, slope=1, colour="My Abline")) 

enter image description here

あなたはabline用に別の凡例をしたい場合は、ポイントの塗りの美学を使用してのみablineの色の凡例を予約することができます。これを行うには、塗りつぶしたポイントマーカー(ポイントマーカーの形状21〜25)を使用します。下のコードでは、stroke=0は、塗りつぶされた点の周りの枠線を削除することです。

ggplot(dat, aes(X, Y, fill=Functions)) + 
    geom_point(shape=21, size=2, stroke=0) + 
    geom_abline(aes(intercept=0, slope=1, colour="My Abline")) + 
    scale_fill_manual(values=c(B="green", C="red", A="blue")) + 
    scale_colour_manual(values="black") + 
    labs(colour="") 

enter image description here

+0

黒のAB線を追加したいとします。私はそれを伝説にどのように含めることができますか? – arbitrarystringofletters

+0

「ABライン」とは何ですか?あなたはアブラインですか? – eipi10

+0

はい。それは私の悪です。 – arbitrarystringofletters

関連する問題