2017-07-27 50 views
1

我有一個關於如何轉換ggplot2中的y軸的問題。我的情節現在有兩條線和一個散點圖。對於散點圖,我對零附近的區域非常感興趣。是否有可能擴大0%到5%之間的空間並將空間縮小到20%到30%之間? 我試圖用 coord_trans(y =「log10」) 轉換成對數形式。但在這種情況下,我有很多負值,所以如果我想使用sqrt或log,負值將被刪除。你有什麼建議嗎?在不改變ggplot2中的原始數據的情況下轉換y軸

以下是我的數據點的示例。

df1 = data.frame(y = runif(200,min = -1, max = 1)) 
df1 = data.frame(x= seq(1:200), y = df1[order(abs(df1$y)),]) 
ggplot(df1) + geom_point(colour = "black",aes(x,y) ,size = 0.1) 

我想在0%和5%之間有更多的空間,5%和30%之間的空間要少。

我試圖使用trans_new()來轉換軸。

eps <- 1e-8 

tn <- trans_new("logpeps", 
       function(x) (x+eps)^(3), 
       function(y) ((y)^(1/3)), 
       domain=c(- Inf, Inf) 
      ) 

ggplot(df1)+ geom_point(colour = "black",aes(x,y) ,size = 0.1) + 
    # xlab("Observations sorted by PD in v3.1") + ylab("Absolute PD difference ") + 
    # ggtitle("Absolute PD for RiskCalc v4.0 relative to v3.1") + 

    scale_x_continuous(breaks = seq(0, round(rownum/1000)*1000, by = round(rownum/100)*10)) + 
    scale_y_continuous(limits = c(-yrange,yrange),breaks = c(-breaksY,breaksY), 
        sec.axis = sec_axis(~.,breaks = c(-breaksY[2:length(breaksY)],breaksY), labels = scales:: percent 
             )) + 
# geom_line(data = df, aes(x,y[,3], colour = "blue"),size = 1) + 
# geom_line(data = ds,aes(xval, yval,colour = "red"),size = 1) + 
    coord_trans(y = tn) + 
    scale_color_discrete(name = element_blank()) 

但它壓縮所述情節什麼I I want.Then嘗試使用Y,它是相對於該中心= Y^3,但它示出了錯誤:zero_range(範圍)

欣賞!!

enter image description here

+1

您可以先過濾掉所有<0,並排除積極方面的任何異常值,從而爲您提供更有用的窗口。 – Mako212

+0

@ Mako212有一個好點。我不確定具有不同範圍的兩個刻度的軸通常用於數據可視化還是推薦用於數據可視化。考慮將y軸的極限值設置爲10%和-10% –

+1

@AlexP我強烈建議避免在同一圖表上使用不同的軸比例(假設您正在討論對紅色和藍色使用不同的範圍),因爲它暗示了在同一張圖表上兩組數值之間的假等值/比較。只需將圖表限制在+/- 10%就可以了 – Mako212

回答

0

嘗試在y值的立方根變換:

aes(y=yVariable^(1/3))

,或者使用trans_new()定義一個新的轉換(如立方根,具有令人愉悅的場所和標籤) 。

+0

使用trans_new()將y軸與立方體根壓縮圖中的X軸與我想要的相反。所以我試圖將Y軸轉換爲立方體,但它只是顯示錯誤信息:缺少TRUE/FALSE值。 –

+0

嗯...哦,是啊,我想因爲你正在用百分比工作,根本會做有趣的事情。 。 。在上面的註釋中嘗試對數模數,並將y軸限制在+/- 10% –

0

一對夫婦的想法:如果你想嘗試數轉換

scale_y_continuous(expand = c(0,0)) 

,只是做:

您可以刪除的情節空的邊緣,像這樣

scale_y_log10() 

如果你想關注窗口:

scale_y_continuous(limits=c(-.15,.15), expand=c(0,0)) 

還可以考慮加入theme_bw()以獲得更清晰的外觀

相關問題