2012-09-17 91 views
5

我正試圖在Rg中創建一個簡單的密度圖ggplot2。這是我的代碼,它很棒。R ggplot2 - 簡單的繪圖 - 無法指定日誌軸限制

d <- ggplot(result, aes(x=result$baseMeanA)) 
d + geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
scale_x_log10() + scale_y_continuous(limits = c(0, 0.45)) 

問題是,我不能調整x軸,因爲我想成負數。

scale_x_log10(limits= c(1, 10000)) 

的偉大工程,但

scale_x_log10(limits= c(-1, 10000)) 

不會在所有的工作!它給了我這個錯誤:

Error in if (zero_range(range)) { : missing value where TRUE/FALSE needed

請幫忙!

+1

只是猜測,但也許你想要原始比例限制從0.1到10000(即log10(x)從-1到5)?假設你不希望log10(x)從-1到10000,因爲上限將在10^10000(a *非常大的值,因爲在可觀察宇宙中有大約10^80個原子http ://en.wikipedia.org/wiki/Observable_universe ...)如果我是對的,那麼你想'scale_x_log10(limits = c(0.1,1e5))' –

+0

是的,我想我現在明白了。我不能在日誌範圍內使用負數。謝謝。我現在看到了我需要做的事情,我需要在結果中添加一個像1或0.1這樣的僞序號,以便它看起來正確,否則我會以某種方式放棄所有非常小的數字。 – user1678000

回答

2

你試圖做的事情沒有多大意義嗎?負數的對數不是我們可以在R中表示的東西

R> log(-1) 
[1] NaN 
Warning message: 
In log(-1) : NaNs produced 

所以R應該在哪裏畫軸?

+0

是的,你可能是對的。我不知道。我想現在我知道要解決我的問題,我需要在結果中添加一個僞序列號,以便我可以直觀地看到它。 – user1678000

3

如果限制的範圍應該是部分零度以下,你可以LOG10變換你的變量,並指定一個連續的尺度界限:

ggplot(result, aes(x=log10(baseMeanA))) + 
    geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
    scale_x_continuous(limits = c(-1, 10000) + 
    scale_y_continuous(limits = c(0, 0.45)) + 
1

E 1 Y不能爲負。指數常數e是正數,而y只是一個指數。並通過數學定義:

日誌(X)= Y < ==> X = E ^ý

這正是爲什麼R 1不能計算日誌如果(x)的x爲負。它違背了數學定義。

我希望這有助於理解爲什麼這個陰謀給你帶來麻煩。