Graphique à bulles avec ggplot2
Je veux imprimer un graphique en bulles dans R. Le problème que j'ai rencontré est que les deux, mon x et mon axe y sont discrètes. En théorie, cela signifie beaucoup de points de données (des bulles), se retrouver sur la même coordonnée. Je préfère les avoir dispersés à travers le point de données, mais toujours dans un quadrant qui met en évidence la bulle appartient à l'coordonnées x/y.
Je pense que c'est mieux illustré par un petit exemple. Le code suivant doit mettre en évidence le problème:
# Example
require(ggplot2)
zz <- textConnection("Row PowerSource ProductSegment Price Model ManufacturingLocation Quantity
1 High SegmentA Low ModA LocationA 5000
2 Low SegmentB Low ModB LocationB 25000
3 High SegmentC Low ModC LocationC 15000
4 Low SegmentD High ModD LocationD 30000
5 High SegmentE High ModE LocationA 2500
6 Low SegmentA Low ModF LocationB 110000
7 High SegmentB Low ModG LocationC 20000
8 Low SegmentC Low ModH LocationD 3500
9 High SegmentD Low ModI LocationA 65500
10 Low SegmentE Low ModJ LocationB 145000
11 High SegmentA Low ModK LocationC 15000
12 Low SegmentB Low ModL LocationD 5000
13 High SegmentC Low ModM LocationA 26000
14 Low SegmentD Low ModN LocationB 14000
15 High SegmentE Mid ModO LocationC 75000
16 Low SegmentA High ModP LocationD 33000
17 High SegmentB Low ModQ LocationA 14000
18 Low SegmentC Mid ModR LocationB 33000
19 High SegmentD High ModS LocationC 95000
20 Low SegmentE Low ModT LocationD 4000
")
df2 <- read.table(zz, header= TRUE)
close(zz)
df2
ggplot(df2, aes(x = ManufacturingLocation, y = PowerSource, label = Model)) +
geom_point(aes(size = Quantity, colour = Price)) +
geom_text(hjust = 1, size = 2) +
scale_size(range = c(1,15)) +
theme_bw()
Comment puis-je disperser les bulles un peu pour montrer les différents produits dans chacune des catégories et de leur quantité?
(Toutes mes excuses, je ne peux pas ajouter une image à l'instant à cause de trop peu de réputation)
Peut-être que vous pouvez vous pouvez utiliser geom_jitter(...) au lieu de geom_point et peut-être également utiliser le paramètre alpha pour ajouter de la transparence en raison du chevauchement.
OriginalL'auteur Roman | 2014-11-05
Vous devez vous connecter pour publier un commentaire.
Que Tom Martens, a souligné le réglage alpha peut montrer tout chevauchement. La suite alpha niveau:
résultats dans:
À l'aide de geom_jitter au lieu de le point, combiné avec alpha:
ce produit:
EDIT: afin d'éviter l'artéfact dans la légende de l'alpha doit être placé à l'extérieur de l'aes:
:
et:
:
EDIT 2: Donc, cela a pris un certain temps à comprendre.
J'ai suivi l'exemple j'ai fait un lien dans mon commentaire. J'ai modifié le code pour l'adapter à vos besoins. Tout d'abord, j'ai créé les valeurs de gigue à l'extérieur de la parcelle:
J'ai alors appelé ces valeurs dans l'geom_point et geom_text coordonnées x et y à l'intérieur de l'aes. Cela a fonctionné par le sautillement les bulles et l'appariement des étiquettes à eux. Cependant il a sali le x et le y des étiquettes de l'axe, donc je relabled comme peut être vu dans scale_x_discrete et scale_y_discrete. Voici l'intrigue du code:
Qui donne ce résultat:
Vous pouvez ajuster la taille des bulles via scale_size ci-dessus. J'ai exporté cette image avec des dimensions de 1000*800.
Concernant votre demande d'ajouter des bordures, je pense qu'il est inutile. Il est très clair dans cette parcelle où les bulles appartiennent & je pense que les frontières de le faire paraître un peu moche. Toutefois, si vous voulez toujours frontières je vais jeter un oeil et voir ce que je peux faire.
Donnera +1 dès que j'ai 15 réputation. Des excuses.
Je n'ai pas le temps maintenant de résoudre cela, mais quelque chose comme: geom_text(hjust = 1, size = 3,position=position_jitter()) va s'arrêter d'etiquettes se chevauchent, mais je soupçonne qu'ils ne correspondent pas les bulles. Consultez ici une idée de comment résoudre ce problème: stackoverflow.com/questions/6551147/... je vais jeter un oeil demain.
Très bonne réponse. Montre toutes les questions clés - je vous Remercie beaucoup
OriginalL'auteur Docconcoct