我有一些数据(包括NA),我想制作一个漂亮的3D直方图。更确切地说,我想要以下内容:
问题/尝试解决:
为了解决1/2)我已经将NA设置为零,并且我试图将它们染成“黑色”(这不能按预期工作,见下文)。更确切地说,我创建了一个调色板
黑色,黑色,......,黑色,浅绿色,深绿色,......,深红色
问题是:第一个值(大约6.5而不是0而不是NA)也会变成黑色......这是我不想要的。
编辑:对不起,刚刚使用解决了这个问题lengthOfColorPalette = 50
howmanyOfThemShouldBeBlack = floor((minz/maxz)*lengthOfColorPalette)-1
而不是
lengthOfColorPalette = 20
howmanyOfThemShouldBeBlack = floor((minz/maxz)*lengthOfColorPalette)
为了解决3)我已经将'hist3D'中的'scale'参数设置为true,但这并没有给出我想要的'方形缩放':两个轴都缩放到[0,1](这很好)但是x轴由0.5到1.5的常规步长组成,y轴由值5,7,10,15,25组成,条形看起来有点偏斜。 我只是想让R使用我给它的水平来标记轴上的刻度并忽略它们的相对距离。
直到现在的代码:
library(plot3D)
set.seed(1234)
# x and y distances are not equal!
xLevels = seq(0.5, 1.5, length=10)
yLevels = c(5,7,10,15,25)
# just produce some random data
zValueFunction = function(x, y) {
return(3*x + y)
}
z = outer(xLevels, yLevels, zValueFunction)
# set some of the entries to 'NA'
for (i in 1:10) {
z[sample(1:nrow(z), 1), sample(1:ncol(z), 1)] = NA
}
# replace NA's by zero
z[is.na(z)] = 0
# make a color palette [0...min(z)) --> black
# [min(z), max(z)]: linearly from green to red
table_z = table(z)
minz = as.numeric(names(table_z[2]))
maxz = as.numeric(names(table_z[length(table_z)]))
lengthOfColorPalette = 50
howmanyOfThemShouldBeBlack = floor((minz/maxz)*lengthOfColorPalette)-1
r.prop.1 = rep(0, howmanyOfThemShouldBeBlack)
r.prop.2 = seq(0, 1, length=(lengthOfColorPalette-howmanyOfThemShouldBeBlack))
g.prop.1 = rep(0, howmanyOfThemShouldBeBlack)
g.prop.2 = 1 - r.prop.2
r.prop = c(r.prop.1, r.prop.2)
g.prop = c(g.prop.1, g.prop.2)
color2 = rgb(r.prop, g.prop, 0, maxColorValue=1)
# draw the histogram
titleString = "title of hist"
hist3D(xLevels, yLevels, z, theta=330, phi=40, expand=0.7, col=color2, d=1,
ticktype="detailed", xlab=paste0("\n\n\n", "X-AXIS"), ylab=paste0("\n\n", "Y-AXIS"), zlab=paste0("\n\n", "Z-AXIS"),axes=TRUE, border="black", scale=TRUE)
title(titleString)
这会产生:
遇到上述问题......
提前, 法比安维尔纳