我有一个有点“奇怪”的二维分布(对于一些统一的值不正常,但它有点像这样..这只是一个最小的可重现示例),并且想要对数值进行对数转换并绘制它们.
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()
如何“重新缩放”坐标轴,以便所有点都完全包含在网格内并且地毯图不受影响,如第一个示例所示?
最佳答案
也许你想要
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
关于r - 使用对数刻度时具有难看边距的散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903940/