0

このようなデータがあるとします。

> print(dat)
V1    V2
1  1 11613
2  2  6517
3  3  2442
4  4   687
5  5   159
6  6    29

# note that V2 is the frequency and V1 does not always start with 1. 


> plot(dat,main=title,type="h")
   # legend()??

ここでやりたいことは、ヒストグラムをプロットし、平均と標準偏差を凡例として含めることです。上記の例では、標準偏差は 0.87 に等しく、平均は 1.66 です。

Rでそれを自動的に達成するにはどうすればよいですか?

4

2 に答える 2

3

ここに画像の説明を入力してくださいこれにより、Gavinが気付いた凡例の作成に関する問題が解決されます。

require(Hmisc) 
myMean <- wtd.mean(dat$V1, dat$V2)
mySD <- sqrt(wtd.var(dat$V1, dat$V2))
plot(dat,main="title",type="h")

L= list( bquote(Mean== .(myMean)), bquote(SD== .(mySD) ) ) 
legend('topright', legend=sapply(L, as.expression))

これは、私が2010年に投稿した、ソリューションの戦略をGaborGrothendieckとThomasLumleyの間の2005年の交換に帰したRhelpに関する回答から引き出されたものです。

于 2012-05-01T14:33:43.267 に答える
2

これはかなり近くなります:

dat <- data.frame(V1 = 1:6, V2 = c(11613, 6517, 2442, 687, 159, 29))

addMyLegend <- function(data, where = "topright", digits = 3, ...) {
    MEAN <- round(mean(data), digits = digits)
    SD <- round(sd(data), digits = digits)
    legend(where, legend = list(bquote(Mean == .(MEAN)), 
                                bquote(SD == .(SD))),
           ...)
}

plot(dat, type = "h")
addMyLegend(dat$V1, digits = 2, bty = "n")

どちらが与える

カスタム凡例

plotmath コードに==と タイプセットが表示=されない理由がわかりません ... 調べる必要があります。

?bquote何が起こっているかを確認するには、式のコンポーネントを動的データに置き換えるために使用できることを説明している記事を読んでください。ラップされた.( )ものはすべて、式のラップされた部分で指定されたオブジェクトの値に置き換えられます。したがってfoo == .(bar)、という名前のオブジェクトを探し、barの値をbar式に挿入します。bar含まれている場合1.3、適用後の結果は のbquote(foo == .(bar))ようになりexpression(foo == 1.3)ます。

私の関数の残りの部分は、addMyLegend()read ではないにしても、かなり自明のはず?legendです。inをlegend()介してに任意の引数を渡すことができることに注意してください。...addMyLegend()

于 2012-05-01T11:02:38.123 に答える