更改条形图中条形的颜色(与条形长度有关)

时间:2019-02-01 15:39:16

标签: r colors bar-chart

我在R基座上绘制了一个堆积的条形图:

set.seed(12)
dat <- matrix(sample(1:6, 6) , nrow = 3)
rownames(dat) <- c("A", "B", "C")
colnames(dat) <- c("blue", "green")
barplot(dat, beside = TRUE)

我想

  • 为每组条形分配一种颜色,并且
  • 根据条形长度更改亮度(从黑色变为彩色),以使长度为6的条形具有全彩色。

像这样:

enter image description here

我该如何实现?


我通过以下方式修改了@nya的答案:

set.seed(12)
dat <- matrix(sample(1:6, 6) , nrow = 3)
rownames(dat) <- c("A", "B", "C")
colnames(dat) <- c("blue", "green")

sequence <- seq(1, 6, 1)  # min = 1, max = 6, steps = 1
resolution <- length(sequence)
blues <- colorRampPalette(c("black", "blue"))(resolution)
greens <- colorRampPalette(c("black", "green"))(resolution)

cols <- c(blues[match(dat[, "blue"], sequence)],
          greens[match(dat[, "green"], sequence)])

mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(2, 0, -2, 0))
barplot(dat, beside = TRUE, col = cols)

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,我们需要创建用于绘制的颜色渐变。让我们使用从黑色到蓝色或绿色的10种颜色的分辨率。

res <- 10
blues <- colorRampPalette(c("black", "blue"))(res)
greens <- colorRampPalette(c("black", "green"))(res)

第二,我们将使用强制cut的函数来确定值在渐变中的合适位置。我们将使用因子(子集行时在R中解释为数字)进行选择,哪些颜色对应于数据中的哪些值。

b.cut <- as.factor(cut(dat[, "blue"], breaks = res))
g.cut <- as.factor(cut(dat[, "green"], breaks = res))
cols <- c(blues[b.cut], greens[g.cut])
cols

这些颜色可用于绘图。请注意,我更改了输入数据的名称,因为data是一个函数,一种好的编程习惯是避免用变量覆盖函数。

barplot(dat, beside = TRUE, col = cols)

enter image description here

答案 1 :(得分:0)

您可以通过添加颜色参数col来修改最后一行,以在代码中包括颜色选项。我通过添加如下所示颜色的适当六边形代码来修改了最后一行:

barplot(data, beside = TRUE,col=c("#0000FF","#0066FF","#00FFFF","#ADFF2F","#008000","#006400"))

这是我得到的情节。

修改后的代码发布在下面。根据您的需要更改六角形颜色代码。我引用了datamentor网站的Color Cycling in R部分。

set.seed(12)
data = matrix(sample(1:6, 6) , nrow = 3)
rownames(data) = c("A", "B", "C")
colnames(data) = c("blue", "green")
barplot(data, beside = TRUE,col=c("#0000FF","#0066FF","#00FFFF","#ADFF2F","#008000","#006400"))