R中的3D直方图:一些问题

时间:2015-06-01 10:31:14

标签: r plot

我有一些数据(包括NA),我想制作一个漂亮的3D直方图。更确切地说,我想要以下内容:

  1. 将NA视为人们可以通过眼睛轻松看到的东西
  2. 制作调色板,使低值显示为“绿色”,高值显示为“红色”
  3. 条形应该是与轴的实际缩放无关的方形
  4. 问题/尝试解决:

    为了解决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)
    

    这会产生:

    遇到上述问题......

    提前, 法比安维尔纳

0 个答案:

没有答案