如何在R中制作二维散点图,第三维表示反映z值的色谱?

时间:2012-07-30 13:05:44

标签: r

我试图在R中制作二维散点图,第三维表示反映值的色谱。我已经为此工作了两个星期,没有博客帮助过。这是我的数据集:

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,线框和计数器制作了三维图形,但这些都是复杂而丑陋的。有人请帮助我知道我遗漏了一些简单的东西,比如我的z值可能是零或小于一。

1 个答案:

答案 0 :(得分: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"

注意输出是一样的吗?