2017-10-10 99 views
0

應用變換以軸在圖中,與使用ggplot2包的構造,例如,這樣的一種:R:如何同時扭轉和在GGPLOT2

ggplot(cars, aes(x = speed, y = dist))+geom_col() 

的軸可以通過施加適當的指令變換。例如,+scale_y_continuous(trans="reverse")從上到下繪製座標軸,並且scale_y_continuous(trans="sqrt")進行非線性變換。我需要將這兩個函數結合起來,這些函數的頂部有軸原點,Y軸有log或sqrt變換。應用由一個(即+scale_y_reverse() ... + scale_y_log())的轉換提供了一個警告:Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

回答

1

如何:

require(scales); 
rev_sqrt_trans <- function() { 
    scales::trans_new(
     name = "rev_sqrt", 
     transform = function(x) -sqrt(abs(x)), 
     inverse = function(x) x^2); 
} 

require(ggplot2); 
ggplot(cars, aes(x = speed, y = dist)) + geom_col() + scale_y_continuous(trans = "rev_sqrt") 

定義新改造時,您可以優化休息,看到?trans_new

enter image description here

+0

這個配方直接應用產生了一個錯誤: 錯誤的get(as.character(FUN),模式= 「功能」,ENVIR = ENVIR):模式 '功能' 的 對象 'rev_sqrt_trans'沒有被發現 – astrsk

+0

啊,是的,道歉!我忘了在函數中包裝新的轉換。它現在應該工作。 –