86

R を使用して同じデバイスで 2 つの密度プロットをオーバーレイしたいのですが、どうすればよいですか? ウェブを検索しましたが、明らかな解決策は見つかりませんでした。

私の考えは、テキストファイル(列)からデータを読み取ってから使用することです

plot(density(MyData$Column1))
plot(density(MyData$Column2), add=T)

またはこの精神の何か。

4

8 に答える 8

102

2番目のものに使用linesします:

plot(density(MyData$Column1))
lines(density(MyData$Column2))

ただし、最初のプロットの制限が適切であることを確認してください。

于 2011-08-04T09:44:35.363 に答える
52

ggplot2は、Gavin が非常に巧妙な方法で言及している範囲の問題などを処理する別のグラフィック パッケージです。また、適切な凡例の自動生成も処理します。私の意見では、手動操作が少ないため、箱から出してすぐに洗練された感じがします。

library(ggplot2)

#Sample data
dat <- data.frame(dens = c(rnorm(100), rnorm(100, 10, 5))
                   , lines = rep(c("a", "b"), each = 100))
#Plot.
ggplot(dat, aes(x = dens, fill = lines)) + geom_density(alpha = 0.5)

ここに画像の説明を入力

于 2011-08-04T11:31:49.620 に答える
24

y 軸の制限を処理し、色を追加し、任意の数の列で機能するベース グラフィック バージョンを追加します。

データセットがある場合:

myData <- data.frame(std.nromal=rnorm(1000, m=0, sd=1),
                     wide.normal=rnorm(1000, m=0, sd=2),
                     exponent=rexp(1000, rate=1),
                     uniform=runif(1000, min=-3, max=3)
                     )

次に、密度をプロットします。

dens <- apply(myData, 2, density)

plot(NA, xlim=range(sapply(dens, "[", "x")), ylim=range(sapply(dens, "[", "y")))
mapply(lines, dens, col=1:length(dens))

legend("topright", legend=names(dens), fill=1:length(dens))

これにより、次のことが得られます。

ここに画像の説明を入力

于 2016-03-20T13:04:55.590 に答える
12

完全なセットを提供するために、以下を使用したチェースの回答のバージョンを示しlatticeます。

dat <- data.frame(dens = c(rnorm(100), rnorm(100, 10, 5))
                   , lines = rep(c("a", "b"), each = 100))

densityplot(~dens,data=dat,groups = lines,
            plot.points = FALSE, ref = TRUE, 
            auto.key = list(space = "right"))

次のようなプロットが生成されます。 ここに画像の説明を入力

于 2011-08-04T14:46:34.267 に答える
3

上記のラティスの例を使用して、気の利いた関数を作成しました。メルト/キャストによるリシェイプでこれを行うには、おそらくより良い方法があります。(改善が見られた場合はコメントまたは編集してください。)

multi.density.plot=function(data,main=paste(names(data),collapse = ' vs '),...){
  ##combines multiple density plots together when given a list
  df=data.frame();
  for(n in names(data)){
    idf=data.frame(x=data[[n]],label=rep(n,length(data[[n]])))
    df=rbind(df,idf)
  }
  densityplot(~x,data=df,groups = label,plot.points = F, ref = T, auto.key = list(space = "right"),main=main,...)
}

使用例:

multi.density.plot(list(BN1=bn1$V1,BN2=bn2$V1),main='BN1 vs BN2')

multi.density.plot(list(BN1=bn1$V1,BN2=bn2$V1))
于 2015-09-14T23:21:35.990 に答える