2012-07-30 70 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