2009-09-02 21 views
6

私はthisのようなデータを持っています。複数密度曲線を1つのプロットに重ねてRで描画する方法

そして私は、1つのプロットに複数の濃度曲線を作成するつもりです。ここでは、各曲線 が一意のIDに対応しています。

私はこのコードで "sm"パッケージを使用しようとしましたが、成功しませんでした。

library(sm) 
dat <- read.table("mydat.txt"); 
plotfn <- ("~/Desktop/flowgram_superimposed.pdf"); 
pdf(plotfn); 

sm.density.compare(dat$V1,dat$V2, xlab = "Flow Signal") 
colfill <- c(2:10); 
legend(locator(1), levels(dat$V2), fill=colfill) 

dev.off(); 

それを行うには正しい方法です何かアドバイスしてくださいまたはそれを行うには 別の方法がある場合は?

私は最後にこの種のプロットを取得しようとしています。 figure http://img524.imageshack.us/img524/2736/testl.png

+2

同時にRリストに質問してください。 http://www.nabble.com/Howto-Superimpose-Multiple-Density-Curves-Into-One-Plot-td25254899.html –

+0

私はなぜ、それがまだ大したものではないと考えているのか分かりません2つのユーザグループの間で重複する。なぜそれをしてはいけないのかを詳しく説明できますか? –

+1

"マルチポスティングは、帯域幅、お金、および人の時間の無駄であり、何の利点もなく、歓迎されるべきではありません。 http://bit.ly/Ja5n1。最初の2つの理由は最近重要ではありませんが、私は自分の時間を大切にし、複数のリストで同じメッセージを読むのは好きではありません。 –

答えて

11

ggplot2を使用してみてください:

スパゲッティコード方式でベースのグラフィックスを使用して
dnow <- read.table("http://dpaste.com/88561/plain/") 
library(ggplot2) 
qplot(V1, colour=factor(V2), data=dnow, geom="density") 
+0

ggplot2のパワーを示す素晴らしいソリューション! –

+1

リンクはもう働きません。このように私はあなたのソリューションが何をしているのかをよく理解できません。リンクを修正できますか?ありがとう... –

+3

@Manoel 'qplot(mtcars $ drat、color = factor(mtcars $ cyl)、data = mtcars、geom =" density ")'は、機能的な例を与えるべきです。 – Unode

3

plot.multi.dens <- function(s) 
{ 
junk.x = NULL 
junk.y = NULL 
for(i in 1:length(s)) 
{ 
junk.x = c(junk.x, density(s[[i]])$x) 
junk.y = c(junk.y, density(s[[i]])$y) 
} 
xr <- range(junk.x) 
yr <- range(junk.y) 
plot(density(s[[1]]), xlim = xr, ylim = yr, main = "") 
for(i in 1:length(s)) 
{ 
lines(density(s[[i]]), xlim = xr, ylim = yr, col = i) 
} 
} 
dnow <- read.table("http://dpaste.com/88561/plain/") 
library(sqldf) 
x <- unlist(sqldf("select V1 from dnow where V2==0")) 
y <- unlist(sqldf("select V1 from dnow where V2==1")) 
z <- unlist(sqldf("select V1 from dnow where V2==2")) 
plot.multi.dens(list(x,y,z)) 
library(Hmisc) 
le <- largest.empty(x,y,.1,.1) 
legend(le,legend=c("x","y","z"), col=(1:3), lwd=2, lty = 1) 
+3

ここでsqldfを使用する目的は何ですか? x < - with(dnow、V1 [V2 == 0]) –

+0

あなたは正しいです。しかし、私はsqldfパッケージとアプローチが好きなので、私はノンブレインの方法で使う傾向があります;-) – Paolo

1

私は自分自身がマイクロアレイデータを見ると、このに多くを行うために必要が見つかったので、私これを、github:ARE.utils、特にplot.densitiesの関数で保持しているユーティリティコードのライブラリの一部としてロールアップしました。あなたが独自に作成し、その関数からインスピレーションを取る、またはちょうどそれを全体の売却を取ることができるように

それはベースのグラフィックスを使用しています(ただし、そのライブラリ内のいくつかの他の機能に依存しています):

  1. create.densities、どのデータのリスト/行列/等を密度のリストに変換する。
  2. match.dim(次元「名前」を数値軸に変換する)関数です。

(パッケージ全体をインストールすることもできますが、私はそこにある関数がいくつかの後方互換性のない方法で変更されることは約束していません)。

このような機能を記述するのは難しいことではありませんが、関数が軸やものに正しい範囲を選択していることを確認してください。

library(ARE.utils) 
# Create a matrix dataset with separate observations in columns 
dat <- matrix(c(rnorm(100), rnorm(100, mean=3), 
       rnorm(100, mean=3, sd=2)), 
       ncol=3) 
# Plot them 
plot.densities(dat, along='cols') 

自分の色と同じ軸上に3つの異なる密度のプロットを作成します。とにかく、あなたは、このようなコードを使用します。

+0

スティーブ、これが役に立つとR CMDチェックをパスするなら、それをCRANに送ってください。 R CMDのチェックにまだ合格していない場合は、その部分を作業して前の手順に戻ります:) –

+0

Dirk、後方互換性はあまり懸念しないはずですか? –

+0

Eduardo:これと後方互換性は何ですか? SOの外で私にメールを送ってください。私は本当にあなたの質問を理解していない。 –

4

また、格子パッケージを使用してこれを解決することもできます。

require(lattice) 
dnow <- read.table('http://dpaste.com/88561/plain/') 
densityplot(~V1, groups=V2, data=dnow) 
関連する問題