2011-08-03 54 views
8

我可以在GGally包中爲ggpairs函數提供一個參數,以針對某些而非全部變量使用對數刻度嗎?我可以告訴ggpairs使用對數刻度嗎?

+0

您是否嘗試過使用AES()函數用於此目的?我在幫助頁面中沒有看到任何內容,表明ggpairs中有任何特殊的日誌記錄功能,但可能會假定您將使用典型的ggplot約定。 –

回答

9

不能提供參數本身(一個原因是,創建散點圖功能是預定義的無規模,見ggally_points),但你可以使用之後和getPlot改變putPlot規模。例如:

custom_scale <- ggpairs(data.frame(x=exp(rnorm(1000)), y=rnorm(1000)), 
upper=list(continuous='points'), lower=list(continuous='points')) 
subplot <- getPlot(custom_scale, 1, 2) # retrieve the top left chart 
subplotNew <- subplot + scale_y_log10() # change the scale to log 
subplotNew$type <- 'logcontinuous' # otherwise ggpairs comes back to a fixed scale 
subplotNew$subType <- 'logpoints' 
custom_scale <- putPlot(custom_fill, subplotNew, 1, 2) 
+0

感謝您的解決方案,很高興知道如何操作圖表。我會稍後再嘗試;目前,引入新的日誌變量似乎更容易。 –

2

這與Jean-Robert的答案基本相同,但看起來更簡單(平易近人)。我不知道它是否是一項新功能,但它看起來不像您需要使用getPlotputPlot了。

custom_scale[1,2]<-custom_scale[1,2] + scale_y_log10() + scale_x_log10()

這裏是跨越一個大矩陣應用它的功能。提供圖中的行數和圖的名稱。

scalelog2<-function(x=2,g){ #for below diagonal 
for (i in 2:x){ 
    for (j in 1:(i-1)) { 
     g[i,(j)]<-g[i,(j)] + scale_x_continuous(trans='log2') + 
scale_y_continuous(trans='log2') 
         } } 
for (i in 1:x){ #for the bottom row 
     g[(x+1),i]<-g[(x+1),i] + scale_y_continuous(trans='log2') 
         } 
for (i in 1:x){ #for the diagonal 
     g[i,i]<-g[i,i]+ scale_x_continuous(trans='log2') } 
    return(g) } 
+0

只是爲了澄清,這個選項起作用ggplot2 versoin 2.0.0和GGally版本1.0.1 – Jthorpe

+1

此代碼不適用於我的值爲2以外的值,爲什麼「g [(x + 1),i]」,不只是「g [x,i]」?!? – 2017-03-30 01:31:18

相關問題