2013-06-03 18 views
3

我有一個有點「怪異」的二維分佈(不正常的一些統一值,但它有點看起來像這..這只是一個最小的可重現的例子),並希望對數值進行對數轉換並繪製它們。Scatterplot與醜陋的利潤率,當使用日誌規模

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

我怎樣才能「重新調整」,讓所有的點都在網格內完全包含和地毯情節不受影響,因爲在第一個例子中軸線?

+1

由於對數轉換(= NaN),所以不顯示小於零的值,這就是爲什麼它看起來被「截斷」爲零。 – JT85

+0

可重現的例子嗎? –

+1

這是一個可重複的例子,或者你在哪裏遇到問題? – wnstnsmth

回答

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