3

我有一个有点“奇怪”的二维分布(对于一些统一的值来说不是正常的,但它看起来像这样......这只是一个最小的可重现示例),并且想要对这些值进行对数转换并绘制它们。

library("ggplot2")
library("scales")
df <- data.frame(x = c(rep(0,200),rnorm(800, 4.8)), y = c(rnorm(800, 3.2),rep(0,200)))

如果没有对数转换,散点图(包括我需要的地毯图)工作(非常)好,除了 x 轴上稍微窄一点的地毯图:

p <- ggplot(df, aes(x, y)) + geom_point() +  geom_rug(alpha = I(0.5)) + theme_minimal()
p

在此处输入图像描述

但是,当使用 log10 变换绘制相同的图时,边缘处的点(分别在 x = 0 和 y = 0 处)绘制在地毯图之外或仅在轴上(使用其他数据,并且只有一半一个点可见)。

p + scale_x_log10() + scale_y_log10()

在此处输入图像描述

我怎样才能“重新调整”轴,使所有点都完全包含在网格中并且地毯图不受影响,就像第一个例子一样?

4

1 回答 1

0

Maybe you want

p + scale_x_log10(oob=squish_infinite) + scale_y_log10(oob=squish_infinite)

I don't really know what you expect to happen for those values that can be negative or infinite, but one general advice when transformations don't do what you want is to perform them outside of ggplot2. Something like this might be useful,

library(plyr) 
df2 <- colwise(log10)(df) # log transform columns
df2 <- colwise(squish_infinite)(df2) # do something with infinites

p %+% df2 # plot the transformed data
于 2013-06-05T11:09:33.493 回答