2012-07-30 28 views
0

我想在R中創建一個二維散點圖,第三個維度表示一個反映值的色譜。我一直在爲此工作2周,沒有任何博客提供幫助。這是我的數據集:如何在R中製作二維散點圖,並且第三維表示反射z值的色譜?

x=c(0,0,0,0,264,330,594,726,825,825,2145,2475,3630,5082,8250,10725) 
y=c(450,540,2250,630,540,2160,1170,2340,1080,738,540,648,900,900,2340,1152) 
z=c(.017778,0,.079365,.037333,0,0,.052991,0,0,.009259,.048148,0,0,0,.004274,.003472) 

我已經試過這個代碼...

jet.colors <-colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan","#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) 

plot(x,y, col=jet.colors(12)[z], ylim=c(0,100), pch=20, cex=2) 

legend(8.5,90, col = jet.colors(12)[z], legend=z, pch=15) 

...但是,當我這樣做,只是一個空白xy平面沒有點出現。我用ggplot2包取得了一些成功,但它看起來很難看,我想用簡單的plot命令來完成。我已經成功地從scatterplot3d,wireframe和countours製作了三維圖形,但這些都過於複雜和醜陋有人請幫助我知道我錯過了一些簡單的事情,比如我的z值可能是零或小於一。

+0

有幾件事情:首先你的'ylim'是這樣的,你所有的點都不能在選定的區域繪製(你所有的'y'值都超過100)。然後,當你調用'jet.colors(12)[z]','z'是索引但'z'值都在0和0.1之間時,不能用作索引。我在想,你應該在選擇顏色之前先把你的'z'分成幾類。 – plannapus 2012-07-30 13:14:39

+0

關於'ggplot2',你是否知道允許你大量定製你的情節外觀的選項:https://github.com/hadley/ggplot2/wiki/-opts()-List 有還有一些主題:https://github.com/hadley/ggplot2/wiki/Themes – 2012-07-30 13:53:32

回答

3

我真的不知道如何解釋它,只是cut將在這裏工作。它把你的數字變量變成一個因子,然後它就起作用。 PS GGPLOT2恕我直言,是美麗的,也許你沒有正確地使用它(這是相當不錯的彈性):

plot(x,y, col=jet.colors(12)[cut(z, 12)], pch=20, cex=2) 

編輯:我想我可以解釋一下,我看到plannapus嘗試過了。當您使用[]表示法時,您正在建立索引。索引需要一個整數輸入,但是你提供了一個連續的輸入。通過把它變成一個因素,你可以賦予它整數屬性(對於解釋的屠殺感到抱歉,但是根據非程序員,這是R)。你可以看到如下所示:

> jet.colors(12)[cut(z, 12)] 
[1] "#0039FF" "#00007F" "#7F0000" "#50FFAD" "#00007F" "#00007F" "#FF9600" "#00007F" "#00007F" "#0000DC" 
[11] "#FFF300" "#00007F" "#00007F" "#00007F" "#00007F" "#00007F" 

> jet.colors(12)[as.numeric(cut(z, 12))] 
[1] "#0039FF" "#00007F" "#7F0000" "#50FFAD" "#00007F" "#00007F" "#FF9600" "#00007F" "#00007F" "#0000DC" 
[11] "#FFF300" "#00007F" "#00007F" "#00007F" "#00007F" "#00007F" 

注意輸出是一樣的嗎?

+0

+1'cut'解決方案特別優雅:'cut'將'z'分成幾類:'(-7.94 (0.00655,0.0132)(0.0132,0.0198](0.0198,0.0264](0.0264,0.0331] ...(0.0728,0.0794]'。這些集合然後被當作因子處理,它們可以用於指數。 – plannapus 2012-07-30 13:34:00

相關問題