r - 使用对数刻度时具有难看边距的散点图

标签 r plot ggplot2

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

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

enter image description here

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

p + scale_x_log10() + scale_y_log10()

enter image description here

如何“重新缩放”坐标轴,以便所有点都完全包含在网格内并且地毯图不受影响,如第一个示例所示?

最佳答案

也许你想要

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/

相关文章:

r - 为什么 ggplot2 饼图分面会混淆分面标签

r - 使用 glue::glue 粘贴会更改 facet 中值的顺序

r - 如何在R中对 'paired'向量进行排序

r - 在 R 中,如何计算给定不同变量的因子百分比?

python - 在 Python 中使用 TeX 在 matplotlib 标签中添加换行符?

r - 如何在 R 中每 30 分钟聚合一次

r - 两组向量上的 for 循环的 purrr 解决方案

r - Shiny R - 下载表格的结果

r - 在具有多个组的箱线图中使用 ggplot2 指示显着性

r - 如何在多个未分组的图中保持恒定的文本大小和 x 轴比例