2012-08-29 25 views
12

我已經看到了這個有點類似的問題,但我想直接問我的具體問題,我可以:變換顏色的規模,但保持一個不錯的傳奇與GGPLOT2

我有一個散點圖「Z」可變編碼成一個色標:

library(ggplot2) 
myData <- data.frame(x = rnorm(1000), 
        y = rnorm(1000)) 
myData$z <- with(myData, x * y) 

badVersion <- ggplot(myData, 
       aes(x = x, y = y, colour = z)) 
badVersion <- badVersion + geom_point() 
print(badVersion) 

將會產生這樣的:bad version

正如你所看到的,由於「Z」變量是正態分佈的,只有極少數的點與有色分配的「極端」顏色。這是應該的,但我有興趣強調差異。要做到這一點的方法之一是使用:

betterVersion <- ggplot(myData, 
         aes(x = x, y = y, colour = rank(z))) 
betterVersion <- betterVersion + geom_point() 
print(betterVersion) 

將會產生這樣的:better version

通過應用級()到「Z」的變量,我得到內上差別很小的更加重視「 z「變量。人們可以想象在這裏使用任何轉換,而不是等級,但你明白了。

我的問題基本上是以最原始的單位(z單位,而不是z級別)獲得圖例的最直接的方式或最「真正的ggplot2」方式,同時保持彩色點的轉換版本?

我有一種感覺,這種方式使用rescaler(),但不知道如何使用rescaler()與任意轉換等。一般來說,更清晰的例子將是有用的。

提前感謝您的時間。

+3

+1爲一個可重複的例子,明確的目標和一個有趣的可視化問題。 –

回答

6

看一看包裝scales 尤其 ?trans

我認爲這顏色映射轉換給定所獲得的價值或更極端的應該是合理的(基本上pnorm(z))的概率

我認爲scale_colour_continuous(trans = probability_trans(distribution = 'norm')應該工作,但它會拋出警告。

所以我定義了一個新的轉型(見?trans_new

我必須定義一個轉變和逆

library(scales) 
norm_trans <- function(){ 
    trans_new('norm', function(x) pnorm(x), function(x) qnorm(x)) 
} 

badVersion + geom_point() + scale_colour_continuous(trans = 'norm')) 

enter image description here

使用隨機附送的probability_trans拋出一個警告,不似乎工作

# this throws a warning 
badVersion + geom_point+ 
    scale_colour_continuous(trans = probability_trans(distribution = 'norm')) 

## Warning message: 
## In qfun(x, ...) : NaNs produced 

enter image description here

+0

這是一個非常有用的答案,謝謝。 trans_new()的尺度包文件沒有一個例子,所以謝謝你提供一個例子。另外pnorm()絕對是我使用的正確函數。 – isDotR

+0

但現在我有一個新的問題:在一時興起,我試圖 badVersion + geom_point()+ scale_x_continuous(trans ='norm'),並且它不起作用。使用 badVersion + geom_point()+ scale_x_continuous(trans ='log')確實會產生結果。任何想法爲什麼? – isDotR

+0

嗯......這很有趣 - 我會給它一些想法...也許軸比例尺的處理方式不同,但這很奇怪。我更可能誤解了這些轉變如何運作。 – mnel