Comment produire une heatmap avec ggplot2?
Je suis en train de produire une carte de chaleur à l'aide de ggplot2. J'ai trouvé cet exemple, je suis essentiellement en essayant de reproduire avec mes données, mais j'ai de la difficulté. Mes données est simple .fichier csv qui ressemble à ceci:
people,apple,orange,peach
mike,1,0,6
sue,0,0,1
bill,3,3,1
ted,1,1,0
Je voudrais produire une simple carte de chaleur où le nom du fruit est sur l'axe des x et la personne qui est sur l'axe des ordonnées. Le graphique devrait représenter places où la couleur de chaque carré est une représentation du nombre de fruits consommés. Le carré correspondant à mike:peach
devrait être la plus sombre.
Voici le code que j'utilise, essayez de produire la heatmap:
data <- read.csv("/Users/bunsen/Desktop/fruit.txt", head=TRUE, sep=",")
fruit <- c(apple,orange,peach)
people <- data[,1]
(p <- ggplot(data, aes(fruit, people)) + geom_tile(aes(fill = rescale), colour = "white") + scale_fill_gradient(low = "white", high = "steelblue"))
Quand j'ai tracé ces données, j'obtiens le nombre de fruits sur l'axe des x et des personnes sur l'axe des ordonnées. J'ai aussi ne pas obtenir des dégradés de couleurs représentant du nombre de fruits. Comment puis-je obtenir les noms des fruits sur l'axe des x avec le nombre de fruits consommés par une personne affiche comme une carte de chaleur?
Le courant de sortie, je suis dans la R ressemble à ceci:
OriginalL'auteur drbunsen | 2011-12-06
Vous devez vous connecter pour publier un commentaire.
Pour être honnête @dr.bunsen - votre exemple ci-dessus a été mal reproduit et vous n'avez pas lu la première partie du tutoriel qui vous lié. Ici est probablement ce que vous cherchez:
Oui, vous avez raison, il doit y avoir eu quelques changements dans
ggplot2
et d'autres paquets supprimésrecale
de la fonction ou il est passé de l'autre fonction. Ce que vous avez besoin est d'utiliserrescale
de l'emballagescales
que de redimensionner numérique, vecteur d'avoir spécifié minimum et maximum. J'ai mis à jour le code pour être entièrement reproductibles.parfait!
OriginalL'auteur Geek On Acid
Sept (!) des années plus tard, la meilleure façon de formater correctement vos données est d'utiliser
tidyr
plutôt quereshape
À l'aide de
gather
detidyr
, il est très facile de reformater vos données pour obtenir les 3 colonnes (person
pour l'axe des y,fruit
pour l'axe des x etcount
pour les valeurs):Les données ressemble maintenant à:
Parfait! Nous allons obtenir le tracé. La base geom faire une heatmap avec ggplot2 est
geom_tile
à laquelle nous allons fournir esthétiquex
,y
etfill
.OK pas trop mauvais, mais nous pouvons faire beaucoup mieux.
theme_bw()
qui se débarrasser de l'arrière-plan gris.J'aime aussi utiliser une palette de
RColorBrewer
(avecdirection = 1
pour obtenir les couleurs les plus sombres pour des valeurs supérieures, ou -1 sinon). Il y a un grand nombre de palettes: des Rouges, des Bleus, Spectrale, RdYlBu (rouge-jaune-bleu), RdBu (rouge-bleu), etc. Ci-dessous d'utilisation de la "Verts". ExécuterRColorBrewer::display.brewer.all()
pour voir ce que les palettes ressembler.Si vous voulez les carreaux carrés, il suffit d'utiliser
coord_equal()
.Je constate souvent que la légende n'est pas utile, mais cela dépend de votre cas d'utilisation particulier. Vous pouvez masquer la
fill
légende avecguides(fill=F)
.Vous pouvez imprimer les valeurs sur le dessus des tuiles à l'aide de
geom_text
(ougeom_label
). Il faut esthétiquex
,y
etlabel
mais dans notre cas,x
ety
sont héritées. Vous pouvez également imprimer les valeurs les plus plus grands en passantsize=count
esthétique-dans ce cas, vous aurez aussi envie de passersize=F
àguides
pour masquer la taille de la légende.Vous pouvez dessiner des lignes à travers le carrelage en passant un
color
àgeom_tile
.Mettant tous ensemble:
À enlever quoi que ce soit, il suffit de supprimer la ligne correspondante.
OriginalL'auteur antoine-sac