R:在plot3D包中为几个叠加图设置统一的自定义颜色方案

时间:2017-12-27 22:01:12

标签: r plot colors scatter3d

我们需要在R中绘制几个曲面,逐个调用相应的绘图命令(使用plot3D库;但这同样适用于具有基本R绘图样式的任何其他环境)。每个表面都是根据数据构建的,包含不同范围的数据。我们可以通过一些着色方案为每个表面着色如下:

我们将一些假数据作为XYZ点:

out.trial<-read.csv(text="1, 1, 30
1, 2, 35
1, 3, 29
1, 4, 33
2, 1, 31
2, 2, 32
2, 3, 34
2, 4, 35
3, 1, 28
3, 2, 29
3, 3, 29.5
3, 4, 31
4, 1, 30
4, 2, 31
4, 3, 33
4, 4, 33",header=FALSE)

现在我们将两个彩色“表面”构建为散点图。第二个“表面”仅通过将所有值移动20来生成。

库( “PLOT3D格式”)

   scatter3D(out.trial$V1, out.trial$V2, -out.trial$V3, phi = 0, bty = "g",
 col = gg.col(100,alpha=0.8), pch = 18, ticktype="detailed", xlab = "lon",
 ylab ="lat", zlab = "depth",colvar=-out.trial$V3,zlim=c(-65,-25))

    scatter3D(out.trial$V1, out.trial$V2, -20-out.trial$V3, phi = 0, bty = 
"g", col = gg.col(100,alpha=0.8), pch = 18, 
colvar=-20-out.trial$V3,zlim=c(-65,-25), add=TRUE)

    plotdev()

3D plot with two colored surfaces

但是,在绘图命令中调用的标准颜色键功能默认为每个表面从变量的最小/最大范围分配颜色。因此,具有不同值范围的两个表面以相同的方式着色。在上面的示例中,第一个表面(散点图组)包含28-35范围内的值,第二个表面-48-55,它们都在从蓝色到栗色的调色板中着色。我需要为每个表面设置颜色方案范围(在这种情况下)从28到55。因此上部点将是黄色的,并且botton点将是蓝色的。如何修改指令colvar=以设置自定义范围以分配颜色?

1 个答案:

答案 0 :(得分:0)

解决方案是在所有绘图指令中使用参数clim=。接下来,我们需要在所有绘图命令中禁止显示颜色菜单。示例中要着色的值范围是-55到-29,因此clim=c(-55,-29)

scatter3D(out.trial$V1, out.trial$V2, -out.trial$V3, phi = 0, bty = "g",
 col = gg.col(100,alpha=0.8), pch = 18, ticktype="detailed", xlab = "lon",
 ylab ="lat", zlab = "depth",colvar=-out.trial$V3,zlim=c(-65,-25),clim=c(-55,-29))

scatter3D(out.trial$V1, out.trial$V2, -20-out.trial$V3, phi = 0, bty = 
"g", col = gg.col(100,alpha=0.8), pch = 18, 
colvar=-20-out.trial$V3,zlim=c(-65,-25), add=TRUE, clim=c(-55,-29), colkey=FALSE)

plot with 2 surfaces and one coloring scheme