2016-02-29 1 views
1

J'essaie de faire des barplots groupés avec des données formatées ci-dessous. J'ai écrit le code ci-dessous, mais il ne sert pas mon butComment produire barplot de groupe avec différents codes de couleur?

données

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) 

code

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") 

Ci-dessous est l'image enter image description here

Je ne veux pas avoir la couleur combinaison comme ça je veux la couleur pour chaque groupe comme NAS (nuances de bleu pour chaque rangées), AG (nuances de cornsilk4, PT (nuances de lecture), ST (sha des d'orange)

Comment modifier le code? Donc, chaque catégorie a des nuances plus claires des 4 couleurs que j'ai utilisé dans le code principal

+0

Vous devrez créer un tableau de 16 couleurs. Tels que: 'color = rep (c ("cornflowerblue", "cornsilk4", "rouge", "orange"), chacun = 4)'. Vous devrez modifier avec vos 4 nuances de bleu, 4 nuances de soie de maïs, etc .... Cela rendra également le code de couleur dans la légende moins convivial. – Dave2e

Répondre

2

Si vous voulez des nuances différentes pour chacune des couleurs, vous devrez créer ces couleurs vous-même. Voici une telle fonction qui permet de calculer des couleurs plus claires

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)) 

Il en résulte

enter image description here

Fondamentalement, l'idée est d'ajouter une certaine quantité de blanc (à l'échelle RVB) à chaque couleur. Il y a certainement des façons plus sophistiquées de choisir des couleurs.

+0

Ah ok, merci cette fonction est bien, mais la légende ne reprend pas pour les codes de couleurs différentes. –

+0

comment vais-je également intégrer les légendes avec chaque code de couleur? La fonction est d'une grande utilité. Merci beaucoup. –

+0

'adjustcolor' fait-il aussi' barplot (données2, à côté = TRUE, col = Vectoriser (adjustcolor) (rep (couleurs, each = 4), alpha.f = c (.3, .6, .8, .9))) ' – rawr