3

r の格子パッケージを使用して、累積分布関数を表すヒストグラムと xyplot を重ね合わせたいと思います。

カスタムパネル関数でこれを達成しようとしましたが、うまくいかないようです.1つのプロットが単変量で、もう1つは二変量であると思います。

垂直に積み重ねたい2つのプロットの例を次に示します。

set.seed(1)
x <- rnorm(100, 0, 1)

discrete.cdf <- function(x, decreasing=FALSE){
    x <- x[order(x,decreasing=FALSE)]
    result <- data.frame(rank=1:length(x),x=x)
    result$cdf <- result$rank/nrow(result)
    return(result)
}

my.df <- discrete.cdf(x)

chart.hist <- histogram(~x, data=my.df, xlab="")
chart.cdf <- xyplot(100*cdf~x, data=my.df, type="s",
                    ylab="Cumulative Percent of Total")

graphics.off()
trellis.device(width = 6, height = 8)
print(chart.hist, split = c(1,1,1,2), more = TRUE)
print(chart.cdf, split = c(1,2,1,2))

積み上げプロット

これらを重ねるのではなく、同じフレームに重ねてください。

次のコードは機能しません。また、私が試した単純なバリエーションも機能しません。

xyplot(cdf~x,data=cdf,
          panel=function(...){
              panel.xyplot(...)
              panel.histogram(~x)
          })
4

2 に答える 2

4

カスタム パネル機能で正しい軌道に乗っていました。トリックは、正しい引数をpanel.- 関数に渡すことです。の場合panel.histogram、これは数式を渡さbreaks、引数に適切な値を指定することを意味します。

編集y 軸とtypeプロットの適切なパーセント値

xyplot(100*cdf~x,data=my.df,
          panel=function(...){
              panel.histogram(..., breaks = do.breaks(range(x), nint = 8),
                type = "percent")
              panel.xyplot(..., type = "s")
          })

ここに画像の説明を入力

于 2012-11-14T08:18:26.337 に答える
3

この回答は、より良い回答が得られるまでの単なるプレースホルダーです。

パッケージのhist() 関数にgraphicsは、 というオプションがありますadd。以下は、「古典的な」方法で必要なことを行います。

plot( my.df$x, my.df$cdf * 100, type= "l" )
hist( my.df$x, add= T )
于 2012-11-13T22:22:08.083 に答える