0

我正在尝试在 R 中制作一个二维散点图,其中第三维表示色谱反射值。我已经为此工作了 2 周,但没有任何博客有帮助。这是我的数据集:

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 制作了 3d 图,但是这些图又过于复杂和丑陋了 有人请帮助我知道我缺少一些简单的东西,比如我的 z 值可能为零或小于一。

4

1 回答 1

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"

注意输出是一样的吗?

于 2012-07-30T13:18:13.280 回答