2011-11-22 26 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

相關問題