78

私はRにかなり慣れていないので、次のクエリがあります:

複数の行 (データ系列) を持つ R でプロットを生成しようとしています。これらの線のそれぞれがカテゴリであり、独自の色にしたいと考えています。

現在、私のコードは次のように設定されています:

まず、空のプロットを作成しています:

plot(1,type='n',xlim=c(1,10),ylim=c(0,max_y),xlab='ID', ylab='Frequency')

次に、カテゴリごとに、次のような「for」ループを使用して、この空のプロットに線をプロットしています。

for (category in categories){
lines(data.frame.for.this.category, type='o', col=sample(rainbow(10)), lwd=2)
}

ここには 8 つのカテゴリがあるため、プロットには 8 つの線が生成されます。ご覧のとおり、rainbows() 関数から色をサンプリングして、各行の色を生成しようとしています。

ただし、プロットが生成されると、同じ色の線が複数あることがわかります。たとえば、8 本の線のうち 3 本は緑色です。

これらの 8 つの線のそれぞれに固有の色を付けるにはどうすればよいですか?

また、この独自性をプロットの凡例に反映するにはどうすればよいですか? 関数を検索しようとしましたlegend()が、各カテゴリのこの一意の色を反映するためにどのパラメーターを使用する必要があるかが明確ではありませんでした。

どんな助けや提案も大歓迎です。

4

10 に答える 10

86

データがワイド フォーマット matplotである場合、このために作成され、しばしば忘れられます。

 dat <- matrix(runif(40,1,20),ncol=4) # make data
 matplot(dat, type = c("b"),pch=1,col = 1:4) #plot
 legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend

ggplotなどのプロットパラメータのほとんどが asをpch使用して同じであるなどのことに慣れていない人のための追加のボーナスもあります。 matplot()plot()ここに画像の説明を入力

于 2013-02-13T18:33:01.000 に答える
58

解決策が必要な場合はggplot2、データをこの形式に整形できる場合にこれを行うことができます(以下の例を参照)

# dummy data
set.seed(45)
df <- data.frame(x=rep(1:5, 9), val=sample(1:100, 45), 
                   variable=rep(paste0("category", 1:9), each=5))
# plot
ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable))

ggplot2_geom_line

于 2013-02-13T18:11:43.783 に答える
37

基本グラフィックスを使用してこれを行うための正しい一般的な戦略がありますが、指摘されたように、基本的にRに各行の10のセットからランダムな色を選択するように指示しています。それを考えると、同じ色の2本の線がときどき表示されるのは当然のことです。ベースグラフィックを使用した例を次に示します。

plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n")

cl <- rainbow(5)

for (i in 1:5){
    lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b')
}

ここに画像の説明を入力してください

type = "n"ウィンドウを設定するための元の呼び出しでのすべてのプロットを抑制するためのの使用、およびclforループ内のインデックス付けに注意してください。

于 2013-02-13T18:17:15.103 に答える
8

@Arunダミーデータを使用する:)ここでlattice解決策:

xyplot(val~x,type=c('l','p'),groups= variable,data=df,auto.key=T)

ここに画像の説明を入力

于 2013-02-13T19:30:55.070 に答える
3

を使用して行を追加する別の方法を次に示しますplot()

まず、関数を使用しますpar(new=T)

オプション:

http://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_addat.html

それらを異なる色にするには、 が必要col()です。

余分な軸の説明を避けるために 、2 番目以降のプロットにはxaxt="n"andを使用します。yaxt="n"

于 2013-11-17T23:05:57.080 に答える