2017-07-26 1 views
0

Cette question est probablement très simple, mais je ne peux pas la comprendre. Je produis un histogramme comme proposé dans How to fill histogram with color gradient? et je voudrais changer le schéma de couleurs en utilisant scale_color_gradient2. Les barres d'histogramme doivent être colorées en fonction de la variable continue dans mon jeu de données, avec "darkgreen" pour les plus petites valeurs, "red" pour les plus grandes et "orange" pour celles entre les deux. J'utilise aussi l'attribut "trans" propre de scale_color_gradient2 pour transformer mes données dans le tracé. Malheureusement, appliquer scale_color_gradient2 ne fonctionne pas, car je spécifie déjà le remplissage des couleurs des barres dans les attributs aes de geom_histogram. Maintenant, je suis assez sûr que ggplot2 offre une telle fonctionnalité, mais je ne peux pas comprendre comment. Ai-je besoin de préparer mon jeu de données "manuellement" avant d'appliquer scale_color_gradient2, i. e. dois-je utiliser cut() pour produire des ruptures et affecter les données continues à ces ruptures?Utiliser scale_color_gradient2 dans les histogrammes ggplot2

code Exemple:

myData <- c(1.14697513, 1.17511522, 4.40715049, 12.46033118, 13.31236437, 
     13.80646742, 14.32024812, 14.27723102, 15.38885253, 18.5314918, 
     19.54137644, 19.84750311, 19.95955739, 22.16140883, 23.45692625, 
     26.39371955, 29.84970725, 19.71228586, 23.81598965, 28.8954292, 
     26.42070425, 24.70807915, 25.25013288, 29.06533739, 19.82372419, 
     27.8835174, 20.67534068, 21.48039058, 22.90360096, 23.79028599, 
     23.82270201, 24.75539892, 25.72394072, 24.3639409, 19.84061517, 
     22.13606982, 24.74780434, 22.37468515, 16.02038647, 15.03168204, 
     15.49245895, 15.33408853, 15.72013928, 15.92662432, 16.49098242, 
     31.21540968, 85.36487512, 24.89061536, 22.88268752, 25.45473677, 
     29.40085037, 24.09764601, 25.90179717, 29.04696969, 29.12589867, 
     37.06852817, 28.3928621, 27.97867109, 26.11118457, 25.62078501, 
     25.55879171, 25.47652264, 31.64679767, 28.84595255, 28.06412499, 
     23.15553981, 26.53143762, 23.88348507, 24.14657713, 25.01563365, 
     21.65575207, 15.54498242, 16.57195781, 16.79712558, 16.5264702, 
     15.59375338, 13.81176329, 14.7108595, 18.2395959, 23.32177567, 
     45.4972562, 63.74298896, 56.24248751, 56.28860198, 48.77159908, 
     51.359598, 28.59380079, 18.70095675, 15.86502211, 4.99145761, 
     1.20619987, 1.28706938, 1.39360758, 1.33117437, 1.28165222, 1.20450226, 
     1.18710708, 1.27730078, 1.55985527, 1.92654237, 1.89138402, 1.29368108, 
     1.12383576, 1.17094158, 1.17934022) 

gg_b <- ggplot_build(ggplot() + geom_histogram(aes(x = myData), binwidth=1)) 

nu_bins <- dim(gg_b$data[[1]])[1] 
ggplot() + geom_histogram(aes(x = myData), binwidth=1, 
fill = rainbow(nu_bins, start=4/6)) + scale_color_gradient2(low='darkgreen', mid='orange', high='red', midpoint=2, name= 'mydata', trans = "log2") 
# #scale_color_gradient2 obviously does nothing: How do I get it to work? 

L'intrigue devrait ressembler un peu comme ceci:

# #Histogram 
hp <- qplot(x =myData, fill=..count.., geom="histogram") 
hp 
hp + scale_fill_gradient2(low="darkgreen", mid="orange", high="red", 
midpoint=2, name= 'mydata', trans = "log2") 

Cependant, les barres doivent être colorés en fonction de la variable continue myData, pas selon les chefs d'accusation.

Je suis sûr qu'il me manque quelque chose d'évident, excuses pour cela. Toute aide est très appréciée!

Répondre

1

Est-ce ce que vous cherchez? Vous devez inclure fill=..x.. comme esthétique et utiliser scale_fill_gradient2.

ggplot() + geom_histogram(aes(x = myData, fill = ..x..), binwidth=1) + 
     scale_fill_gradient2(low='darkgreen', mid='orange', high='red', midpoint=2, 
           name= 'mydata', trans = "log2") 

enter image description here

+1

Cheers, je vous remercie beaucoup! C'est exactement ce que je voulais réaliser - je savais qu'il devait y avoir un moyen plus simple. J'ai besoin de m'habituer à la syntaxe de ggplot2. – user6475