Как изготовить групповой барплот с разными цветовыми кодами?
Я пытаюсь сделать сгруппированные столбцы с данными ниже отформатированы. Я написал код ниже, но он не служит моей цели
Данные
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) к каждому цвету. Есть, конечно, более сложные способы выбора цвета.