2011-11-22 43 views
4

我正在做一个点图,我想记录变换的x尺度。我有一些点在0,这ggplot很好地处理,它不会消除它们,但它会剪切它们。我该如何做到这一点,所以我的规模转换点不会被剪切在ggplot2中?

我能做些什么,因此0处的点不会被剪切?看起来xlim()和规模变换不一起玩,只有最后一个被称为生效。

一个例子:

myData <- data.frame(x = c(rexp(5), 0), y = "category") 
myBreaks <- c(.1, 1, 5) 
ggplot(myData, aes(x = x, y = y)) + 
scale_x_continuous(trans = "log", 
        breaks = myBreaks, 
        labels = myBreaks) + 
geom_point(size = 5, legend = F) 

clipped

回答

2

由于log(0)-Inf,我怀疑,如果你让你零0分总是被裁剪。我试图拨弄expand=...coord_trans和其他所有我能想到的东西。

这里是一个解决方法:

  • 设定零个值到任意小的值(比如说1E-6)
  • 包括在该数值的断裂
  • 任选标签,其打破0

代码:

myData <- data.frame(x = c(rexp(5), 0), y = "category") 

myData <- within(myData, x[x==0] <- 1e-6) 
myBreaks <- c(1e-6, 0.1, 1, 5) 
myLabels <- c(0, myBreaks[-1]) 
ggplot(myData, aes(x = x, y = y)) + 
    geom_point(size = 5, legend = F) + 
    scale_x_continuous(
     trans = "log", 
     breaks = myBreaks, 
     labels = myLabels 
    ) 

enter image description here

+0

我想可能会这样。谢谢! – Gregor

+3

我不会很快接受。希望@kohske会很快证明我们错了一个惊人的调整或新的几何! – Andrie

+0

@Kohske不太可能证明log(0)!= -Inf。其他任何东西都是误导 - 特别是将10^-6标记为0! – hadley

相关问题