Изменить цвет баров в барплоте по отношению к длине баров - PullRequest
0 голосов
/ 01 февраля 2019

Я построил столбчатую диаграмму в основании 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 голосов
/ 01 февраля 2019

Вы можете изменить последнюю строку, добавив цветовой аргумент col для включения параметров цвета в коде.Я изменил последнюю строку, добавив соответствующие гексагональные коды цветов, как показано ниже:

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

Это график, который я получил.

Измененный код размещен ниже.Измените гексагональный цветовой код по своему желанию.Я сослался Color Cycling in R раздел с datamentor веб-сайт.

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"))
0 голосов
/ 01 февраля 2019

Во-первых, нам нужно создать цветовые градиенты для черчения.Давайте используем разрешение 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

...