我有一个有点“奇怪”的二维分布(不正常,有一些统一的值,但它看起来像这样......这只是一个可重复性最小的例子),并希望对值进行对数转换并绘制它们。
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()
如何“重新缩放”轴,以便所有点都完全包含在网格中,并且地毯图不受影响,如第一个示例中所示?
答案 0 :(得分:0)
也许你想要
p + scale_x_log10(oob=squish_infinite) + scale_y_log10(oob=squish_infinite)
我真的不知道你对那些可能是负面或无限的值的期望会发生什么,但是当转换没有做你想做的事情时,一个一般建议就是在ggplot2之外执行它们。这样的事情可能很有用,
library(plyr)
df2 <- colwise(log10)(df) # log transform columns
df2 <- colwise(squish_infinite)(df2) # do something with infinites
p %+% df2 # plot the transformed data