2017-12-18 6 views
0

とスケーリング:差Iは、以下のスキューデータを有する対数変換

set.seed(3) 
x <- rgamma(1e6, 0.1, .2) 

summary(log(x)) 
#  Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
# -170.637 -12.760 -5.825 -8.828 -1.745 3.807 

、変換でデータを可視化データの対数変換分布

summary(log(x)) 
#  Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
# -170.637 -12.760 -5.825 -8.828 -1.745 3.807 

を見

ggplot(data.frame(x), aes(x)) + 
    geom_histogram(bins = 100) + 
    scale_x_continuous(trans = "log") 

enter image description here

ggplotのログ変換とスケーリングの違いは何故ですか?私は、x軸を見て違いがあることを知っています。サマリーの最小値は-170.637で、プロットは5.8e-62の範囲の値です。

更新:

g1 <- ggplot(data.frame(x), aes(x)) + geom_histogram(bins = 100) 
g2 <- ggplot(data.frame(x), aes(x)) + geom_histogram(bins = 100) + scale_x_continuous(trans = "log") 
g3 <- ggplot(data.frame(x), aes(log(x))) + geom_histogram(bins = 100) 
gridExtra::grid.arrange(g1, g2, g3, ncol=3) 

enter image description here

g1 <- ggplot(data.frame(x), aes(x)) + geom_histogram(bins = 100) 
g2 <- ggplot(data.frame(x), aes(x)) + geom_histogram(bins = 100) + scale_x_log10() 
g3 <- ggplot(data.frame(x), aes(log10(x))) + geom_histogram(bins = 100) 
gridExtra::grid.arrange(g1, g2, g3, ncol=3) 

enter image description here

+0

FYI、対数変換のデフォルトの区切りは 'スケール:: log_breaks'機能、私が見て有益な発見によって行われます。 – aosmith

答えて

2

あなたの代わりに使用するかどうかを確認する方が簡単かもしれscale_x_log10

ggplot(data.frame(x), aes(x)) + 
    geom_histogram(bins = 100) + 
    scale_x_log10() 

が続い

enter image description here

を与え、我々は比較するいくつかのことを行うことができます。まず、ラベルを変更することができます

ggplot(data.frame(x = log10(x)), aes(x)) + 
    geom_histogram(bins = 100) 

を与える:

myBreaks <- 
    10^c(-61, -43, -25, -7) 

ggplot(data.frame(x), aes(x)) + 
    geom_histogram(bins = 100) + 
    scale_x_log10(breaks = myBreaks 
       , labels = log10(myBreaks)) 

は、我々はまた、それをプロットする前にxを変換することによって、同じプロットを得ることができます

enter image description here

を与えます

enter image description here

と、私たちはlog10(x)

Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
-74.1065 -5.5416 -2.5300 -3.8340 -0.7579 1.6531 

の要約にこれらのすべてを比較することができますがそれはかなり密接に上記のグラフで、最大一致する方法を参照してください?

scale_x_log10およびscale_x_continuous(trans = "log")は実際にはデータを変更していません。軸のスケーリングを変更していますが、ラベルは元の単位に残ります。

元の値に戻すには、log(5.8e-62)-141です。これは、プロットが変換されたデータであると見なすと予想される値です。

あなたが本当に対数の値が表示されている必要があります場合は、あなたにも意味のある値に軸ラベルのデフォルトという付加的な利点と、マッピング内ということをも達成することができます:

ggplot(data.frame(x = x), aes(log10(x))) + 
    geom_histogram(bins = 100) 

を与えます

enter image description here

+0

"..実際にデータを変更していない"ため、ありがとうございます(+1)。 'log(x)'以外の 'x 'をどのように変換してデータに基づいてラベルを自動的にプロットするかについてコメントできますか? – Prradep

+0

最も簡単な応答は「なぜですか?」です。一般的に、グラフがログ変換されるのではなく、測定単位にプロットされていると、グラフを読みやすくなります(ログベースでは特にそうですが、これは明らかです)あなたが '5.8e-62'が' e^-141'と同じであることをすぐには認識しなかったという事実によって)。変換する必要がある場合は、プロットする前に変換します(たとえば、編集した回答の最後の2つのプロットのように 'log(x) 'を使用して)。 –

+0

@Prradep、プロットする前に変換を行う別の方法については、編集を参照してください。 –

関連する問題