6

このようなデータがあります。

そして、複数の密度曲線を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();

それを行う正しい方法は何か、またはそれを行う別の方法があるかどうかをアドバイスしてください。

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

4

4 に答える 4

11

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

dnow <- read.table("http://dpaste.com/88561/plain/")
library(ggplot2)
qplot(V1, colour=factor(V2), data=dnow, geom="density")
于 2009-09-02T11:42:09.573 に答える
4

ラティスパッケージを使用してこれを解決することもできます。

require(lattice)
dnow <- read.table('http://dpaste.com/88561/plain/')
densityplot(~V1, groups=V2, data=dnow)
于 2009-09-03T02:19:29.977 に答える
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)
于 2009-09-02T13:03:11.307 に答える
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つの異なる密度プロットが作成されます。

于 2009-09-02T14:05:33.323 に答える