1

同じグラフにデータ セットから 3 本の線を描画し、ggplot2 を使用して表示しようとしています。各線の色と形を手動で設定したい。

問題は、ラベルの辞書編集順序に基づいて色/形状が設定されていることであり、選択されているものを制御できないようです。

これは私が試したことです:

px <- 
    ggplot(dataset) + 
    stat_smooth(aes(x=id, y=dataset[,4], colour="2000",  linetype="2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,3], colour="500",  linetype="500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,2], colour="1000", linetype="1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +    
    theme(legend.title=element_blank()) +
    xlab("x") +
    ylab("y") +
    ggtitle("px") 

py <- 
    ggplot(dataset) + 
    stat_smooth(aes(x=id, y=dataset[,4], colour="1000",  linetype="1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,3], colour="500",  linetype="500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,2], colour="2000", linetype="2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +    
    theme(legend.title=element_blank()) +
    xlab("x") +
    ylab("y") +
    ggtitle("py") 
pz <- 
    ggplot(dataset) + 
    stat_smooth(aes(x=id, y=dataset[,4], colour="B1000",  linetype="B1000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,3], colour="C500",  linetype="C500"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +
    stat_smooth(aes(x=id, y=dataset[,2], colour="A2000", linetype="A2000"),se=FALSE, size=1, span=0.1, level=0.90, method="loess") +    
    theme(legend.title=element_blank()) +
    ylab("y") +
    xlab("x") +
    ggtitle("pz") 

これは私が得るものです:

ここに画像の説明を入力

私のデータは次のようになります。

> head(dataset)
  id  A  B  C
1  1  0 26 44
2  2  0  0  0
3  3  0  0 46
4  4 26 22  0
5  5 16  0  0
6  6  0  0 30

これらの正確な色、形、凡例ボックスの順序で、最後のもののようなものを持ちたいのですが、各ラベルの前に ABC を付ける必要はありません。

これどうやってするの?

PS: stat_smooth を使用していますが、geom_line でも同じことが起こります

4

1 に答える 1

6

あなたの問題は、これがggplot2で行われる方法ではないためです。[内部で使用してaes()いる場合は、間違っていることの確かな兆候です。

単一の を 3 回個別に呼び出す代わりにgeom、データ フレームを溶かしてから、変数を美学にマッピングします。

dat <- read.table(text = "  id  A  B  C
 1  1  0 26 44
 2  2  0  0  0
 3  3  0  0 46
 4  4 26 22  0
 5  5 16  0  0
 6  6  0  0 30",header = TRUE,sep = "")

require(reshape2)
datm <- melt(dat,id.vars = 'id')
datm$variable <- factor(datm$variable,levels = c('C','A','B'))

ggplot(datm) + 
    geom_line(aes(x = id,y = value,colour = variable,linetype = variable))

geom_lineサンプル データが小さすぎて使用できないため、ここで使用しましgeom_smoothたが、同じように機能します。データを溶かしたら、因子のレベルの順序を調整して順序を制御します。

そして、もちろんAスルー以外のレベルにいつでも変更できます。C

于 2013-08-09T15:52:14.610 に答える