如何为 barplot3d 函数中的行分配颜色

How to assign colors to rows in barplot3d function

我使用 barplot3d::barplot3d 来可视化我的数据。我一直在尝试为每一行分配一种颜色,而不是使用 topcolors = rainbow(100),但我无法弄清楚。我感谢任何帮助、建议或参考。

这是我的代码:

barplot3d(rows = 4,
          cols = 29,
          z = ECdata$EC50,
          scalexy = 0.5, 
          alpha = 0.2,
          theta = 50,
          phi = 50, 
          topcolors = rainbow(100),
          xlabels = 1:29,
          ylabels = c("Adepidyn", "Boscolid", "Fluopyram", "Solateno"), 
          xsub = "Isolate",
          ysub = "Fungicide",
          zsub = "EC50")

回答

只需将每一列重复 cols 次,其中 cols 是列数:

rows <- 4
cols <- 5
my_colors <- rep(rainbow(rows), each = cols)
barplot3d(rows = rows, 
          cols = cols, 
          z = runif(rows * cols),
          topcolors = my_colors)


理由

使用 rainbow(100),您将获得 100 种颜色的颜色代码。我们希望每一行的颜色代码都相同。因此,每个颜色代码的重复次数应与我们的列数一样多。

假设我们需要 5 列。让我们将其存储为:

cols <- 5

现在,我们可以将每个颜色代码重复 5 次:

my_colors <- rep(rainbow(100), each = cols))
head(my_colors, 20)
#  [1] "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#FF0000FF" "#80FF00FF" "#80FF00FF" "#80FF00FF" "#80FF00FF" "#80FF00FF" "#00FFFFFF" "#00FFFFFF"
# [13] "#00FFFFFF" "#00FFFFFF" "#00FFFFFF" "#8000FFFF" "#8000FFFF" "#8000FFFF" "#8000FFFF" "#8000FFFF"

但是,如果我们只有 4 行,barplot3d 中的所有颜色都将偏红,因为我们只得到 100 种颜色中的前 4 种颜色:

因此,我们可以用行数调用 rainbow,以获得更多不同的颜色:

my_colors <- rep(rainbow(rows), each = cols)