2011-12-12 64 views
5

我有一個簡單的散點圖散點圖與顏色組 - 基礎R情節

x<-rnorm(100) 
y<-rnorm(100) 
z<-rnorm(100) 

我要繪製的plot(x,y)但點的顏色應該是彩色編碼的基礎上z

此外,我想有能力定義有多少組(顏色)z應該有。而且這個分組應該能抵抗異常值(也許將密度分成n等密度組)。

直到現在我手動執行此操作,有沒有辦法自動執行此操作?

注意:我想用base R而不是ggplot來做這件事。

回答

11

您可以將顏色矢量傳遞給col參數,因此它只是以一種對您的應用程序有意義的方式定義您的z組。在基地有cut()功能,或者在Hmisc有cut2(),這提供了更多的靈活性。爲了幫助挑選合理的調色板,RColorBrewer包非常寶貴。這裏的定義x,y,z後一個簡單的例子:

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow")) 
plot(x,y, col = as.character(z.cols), pch = 16) 

enter image description here

可以很明顯的手動添加legend。不幸的是,我不認爲所有類型的地塊都接受了col論證的矢量,但type = "p"顯然有效。例如,plot(x,y, type = "l", col = as.character(z.cols))對我來說只是一種顏色。對於這些圖,可以使用lines()segments()或任何您需要使用的低級繪圖命令添加不同的顏色。請參閱@Andrie的回答,以type = "l"爲基礎的圖形here

+0

是否cut()在相等的內容間隔中分割? – ECII

+0

@ECII - 不是默認的。 'Hmisc ::: cut2()'提供了'm'參數,它可以在每個組中設置最小觀察次數,但這很容易。像'z.cols2 < - cut2(z,m = length(z)/ 3)'應該可以做到這一點。 – Chase

+0

cut2中的g參數不應該更好嗎? cut2(z,g = 3)? – ECII