mids - r ヒストグラム 線
対数スケールとカスタムブレークを持つヒストグラム (5)
私はyの対数スケールでRでヒストグラムを生成しようとしています。 現在私は:
hist(mydata$V3, breaks=c(0,1,2,3,4,5,25))
これは私にヒストグラムを与えますが、0と1の間の密度は非常に大きく(約100万の値の差)、他のバーのほとんどを作ることはほとんどありません。
それから私はやってみました:
mydata_hist <- hist(mydata$V3, breaks=c(0,1,2,3,4,5,25), plot=FALSE)
plot(rpd_hist$counts, log="xy", pch=20, col="blue")
それは私に必要なものを私に与えるが、底は0,1,2,3,4,5,25ではなく1から6までの値を示している。また、棒ではなく点としてデータを表示している。 barplot
動作しますが、私は下の軸を取得しません。
あなたの質問から、ログに記録されたX軸またはログされたY軸が必要かどうかは完全には分かりません。 ログされたy軸は、バーを使用するときには、ログに記録されたときに負の無限大になるゼロに固定されているため、良い考えではありません。 この問題を回避するには、周波数ポリゴンまたは密度プロットを使用します。
ここにはかなりのggplot2ソリューションがあります:
library(ggplot2)
library(scales) # makes pretty labels on the x-axis
breaks=c(0,1,2,3,4,5,25)
ggplot(mydata,aes(x = V3)) +
geom_histogram(breaks = log10(breaks)) +
scale_x_log10(
breaks = breaks,
labels = scales::trans_format("log10", scales::math_format(10^.x))
)
geom_histogramにブレークを設定するには、scale_x_log10で動作するように変換する必要がありました
グラフを作成せずにhist()関数を実行し、カウントをログ変換してからFigureを描画します。
hist.data = hist(my.data, plot=F)
hist.data$counts = log(hist.data$counts, 2)
plot(hist.data)
これは正規のヒストグラムのように見えるはずですが、y軸はlog2 Frequencyになります。
ダークの答えは素晴らしいものです。 hist
ような外観が必要な場合は、これを試すこともできます。
buckets <- c(0,1,2,3,4,5,25)
mydata_hist <- hist(mydata$V3, breaks=buckets, plot=FALSE)
bp <- barplot(mydata_hist$count, log="y", col="white", names.arg=buckets)
text(bp, mydata_hist$counts, labels=mydata_hist$counts, pos=1)
最後の行はオプションで、各バーのすぐ下にバリューラベルを追加します。 これは、ログスケールグラフに便利ですが、省略することもできます。
また、 main
、 xlab
、 ylab
パラメータをylab
てプロットタイトル、x軸ラベル、y軸ラベルを提供します。
私は、デフォルトのケースではhistと同じように動作するが、ログ引数を受け入れる関数をまとめた。 それは他のポスターからいくつかのトリックを使用しますが、独自のものをいくつか追加します。 hist(x)
とmyhist(x)
は同じに見えます。
元の問題は次のように解決されます。
myhist(mydata$V3, breaks=c(0,1,2,3,4,5,25), log="xy")
関数:
myhist <- function(x, ..., breaks="Sturges",
main = paste("Histogram of", xname),
xlab = xname,
ylab = "Frequency") {
xname = paste(deparse(substitute(x), 500), collapse="\n")
h = hist(x, breaks=breaks, plot=FALSE)
plot(h$breaks, c(NA,h$counts), type='S', main=main,
xlab=xlab, ylab=ylab, axes=FALSE, ...)
axis(1)
axis(2)
lines(h$breaks, c(h$counts,NA), type='s')
lines(h$breaks, c(NA,h$counts), type='h')
lines(h$breaks, c(h$counts,NA), type='h')
lines(h$breaks, rep(0,length(h$breaks)), type='S')
invisible(h)
}
読者のためのエクササイズ:残念なことに、ヒストリーと一緒に働くものはすべて、ミヒストと一緒に働くわけではありません。 しかし、もう少し手間をかけて修正する必要があります。