我有以下不正确的数据:
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")
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)
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)
答案 0 :(得分:2)
您可能更容易看到是否使用scale_x_log10
ggplot(data.frame(x), aes(x)) +
geom_histogram(bins = 100) +
scale_x_log10()
给出
然后,我们可以做一些比较。首先,我们可以更改标签:
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
来获得相同的情节:
ggplot(data.frame(x = log10(x)), aes(x)) +
geom_histogram(bins = 100)
给出
并且,我们可以将所有这些与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)
给出