Как изготовить групповой барплот с разными цветовыми кодами?

Я пытаюсь сделать сгруппированные столбцы с данными ниже отформатированы. Я написал код ниже, но он не служит моей цели

Данные

data1 <- read.table(text="              NAS  AG   PT      ST
1kb_+/-TSS   1239 885   1232    952
1.5kb_+/-TSS 1440 1092  1467    1181
2kb_+/-TSS   1647 1248  1635    1398
2.5kb_+/-TSS 1839 1403  1794    1594", header=TRUE)

Код

data2=as.matrix(data1)
b<-barplot(data2, legend= rownames(data2), beside= TRUE,las=2,cex.axis=0.7,cex.names=0.7,ylim=c(0,3000), col=c("cornflowerblue","cornsilk4","red","orange"))
tx2 <- data2
text(b,tx2+10, as.character(tx2),pos = 3, cex = 0.5, col = "darkgreen")

Ниже изображение введите описание изображения здесь

Я не хочу иметь цветовую комбинацию, подобную этой, я хочу, чтобы цвет для каждой группы, такой как NAS(оттенки синего для каждой строки),AG(оттенки cornsilk4, PT(оттенки чтения), ST(оттенки оранжевого)

Как мне изменить код? Таким образом, у каждой категории есть более легкие оттенки 4 цветов, которые я использовал в основном коде

1 ответ

Решение

Если вы хотите разные оттенки для каждого из цветов, вам придется создавать эти цвета сами. Вот одна из таких функций, которая может рассчитывать более светлые цвета

fadecolors <- function(colors, steps=4) {
    rr <- col2rgb(colors)
    unlist(Map(function(a) {
        rgb( seq(255, a[1],length.out=steps+1)[-1],
        seq(255,a[2],length.out=steps+1)[-1],
        seq(255,a[3],length.out=steps+1)[-1],
           maxColorValue=255)
    }, as.data.frame(rr)))
}

colors <- c("cornflowerblue","cornsilk4","red","orange")
barplot(data2, legend= rownames(data2), beside= TRUE,las=2,cex.axis=0.7,cex.names=0.7,ylim=c(0,3000), col=fadecolors(colors))

Это приводит к

По сути, идея состоит в том, чтобы добавить определенное количество белого (в масштабе RGB) к каждому цвету. Есть, конечно, более сложные способы выбора цвета.

Другие вопросы по тегам