首页 > 解决方案 > 如何为 barplot3d 函数中的行分配颜色

问题描述

我曾经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")

标签: rcolors

解决方案


回答

只需将每列重复一次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)

推荐阅读