11

同じプロットに履歴と密度が必要です。これを試しています。

myPlot <- plot(density(m[,1])), main="", xlab="", ylab="")
par(new=TRUE)

Oldxlim <- myPlot$xlim
Oldylim <- myPlot$ylim

hist(m[,3],xlim=Oldxlim,ylim=Oldylim,prob=TRUE)

しかし、myPlotのxlimとylimにアクセスできません。

myPlotからそれらを取得する方法はありますか?代わりに他に何をすべきですか?

4

5 に答える 5

6

を使用するpar(new=TRUE)ことが最善の解決策になることはめったにありません。多くのプロット関数には、既存のプロットに追加するようなオプションがありますadd=TRUE(コメントに記載されているヒストグラムのプロット関数を含む)。

本当にこの方法で行う必要がある場合は、関数のusr引数を見てください。実行すると、ユーザー座標で既存のプロットの x と y の制限が得られます。ただし、新しいプロットでその情報を使用する場合は、必ず設定してください。そうしないと、新しいプロットで使用される実際の座標が、指定したものより 4% 拡張されます。 parmylims <- par("usr")xaxs='i'

grconvertXとの機能grconvertYも知っておくと便利です。これらはこの目的で使用できますが、 に比べておそらくやり過ぎpar("usr")ですが、他の座標系で限界を見つけたり、ユーザー座標でプロット領域の中央のような値を見つけたりするのに役立ちます。

于 2012-12-12T17:49:38.423 に答える
5

最初のプロットで独自の xlim と ylim を指定し (適切な値に設定)、それらの値を使用して 2 番目のプロットでヒストグラムの制限を設定することを検討しましたか?

密度を単独でプロットするだけで、両方の軸の最小値と最大値の適切な値を計算し、以下のコードでそれらの値を xmin、xmax、ymin、ymax に置き換えることができるはずです。

何かのようなもの;

myPlot <- plot(density(m[,1])), main="", xlab="", ylab="", xlim =c(xmin, xmax), ylim = c(ymin, ymax)

par(new=TRUE)

hist(m[,3],xlim=c(min, max),ylim=c(min, max),prob=TRUE)
于 2012-12-12T15:39:56.637 に答える
2

最善の解決策は、密度をプロットするときにそれらを修正することだと思います。

それ以外の場合は、plot.default (plot.R) のコードをハッキングします。

xlab=""
ylab=""
log =""
xy <- xy.coords(x, y, xlab, ylab, log)
xlim1 <- range(xy$x[is.finite(xy$x)])
ylim1 <- range(xy$y[is.finite(xy$y)])

または上記のコードを使用して xlim と ylim を生成し、密度のプロットを呼び出します

dd <- density(c(-20,rep(0,98),20))
plot(dd,xlim=xlim1,ylim=ylim1)
x <- rchisq(100, df = 4)
hist(x,xlim=xlim1,ylim=xlim1,prob=TRUE,add=TRUE)

ここに画像の説明を入力

于 2012-12-12T15:35:02.697 に答える
0

なぜ使用しないのggplot2ですか?

library(ggplot2)

set.seed(42)
df <- data.frame(x = rnorm(500,mean=10,sd=5),y = rlnorm(500,sdlog=1.1))

p1 <- ggplot(df) + 
  geom_histogram(aes(x=y,y = ..density..),binwidth=2) +
  geom_density(aes(x=x),fill="green",alpha=0.3) 
print(p1)

密度と歴史

于 2012-12-12T17:21:31.640 に答える