ggplot, facette, piechart: placer le texte au milieu de camembert en tranches
Je suis en train de produire une facettes camembert avec ggplot et confrontés à des problèmes avec la mise en place du texte dans le milieu de chaque tranche:
dat = read.table(text = "Channel Volume Cnt
AGENT high 8344
AGENT medium 5448
AGENT low 23823
KIOSK high 19275
KIOSK medium 13554
KIOSK low 38293", header=TRUE)
vis = ggplot(data=dat, aes(x=factor(1), y=Cnt, fill=Volume)) +
geom_bar(stat="identity", position="fill") +
coord_polar(theta="y") +
facet_grid(Channel~.) +
geom_text(aes(x=factor(1), y=Cnt, label=Cnt, ymax=Cnt),
position=position_fill(width=1))
La sortie:
Quels sont les paramètres de geom_text
devrait être ajusté afin de placer numérique d'étiquettes dans le milieu de piechart tranches?
Question connexe est de savoir Tarte à la parcelle de l'obtention de son texte sur le dessus les uns des autres mais il ne gère pas les cas avec des facettes.
Mise à JOUR: a la suite de Paul Hiemstra conseils et l'approche de la question ci-dessus j'ai modifié le code comme suit:
---> pie_text = dat$Cnt/2 + c(0,cumsum(dat$Cnt)[-length(dat$Cnt)])
vis = ggplot(data=dat, aes(x=factor(1), y=Cnt, fill=Volume)) +
geom_bar(stat="identity", position="fill") +
coord_polar(theta="y") +
facet_grid(Channel~.) +
geom_text(aes(x=factor(1),
---> y=pie_text,
label=Cnt, ymax=Cnt), position=position_fill(width=1))
Comme je m'y attendais, le peaufinage du texte coordiantes est absolu, mais il doit être à l'intérieur de la facette des données:
OriginalL'auteur topchef | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
NOUVELLE RÉPONSE: Avec l'introduction de ggplot2 v2.2.0,
position_stack()
peut être utilisé pour positionner les étiquettes sans avoir besoin de calculer une position variable de la première. Le code suivant vous donnera le même résultat que la vieille réponse:Pour supprimer les "creux" de centre, d'adapter le code pour:
VIEILLE RÉPONSE: La solution à ce problème est la création d'une position variable, ce qui peut être fait assez facilement avec la base de R ou avec la les données.table, plyr ou dplyr paquets:
Étape 1: de la Création de la variable position pour chaque Canal
Étape 2: Créer les facettes de l'intrigue
Le résultat:
peut-être un peu tard, mais j'ai mis à jour la réponse
OriginalL'auteur Jaap
Je tiens à dénoncer la façon traditionnelle de faire des tartes dans ggplot2, qui consiste à tirer un empilées barplot en coordonnées polaires. Même si j'apprécie l'élégance mathématique de cette approche, il provoque toutes sortes de maux de tête lors de la parcelle n'a pas l'air tout à fait la façon dont il est censé le faire. En particulier, précisément réglage de la taille de la tarte peut être difficile. (Si vous ne savez pas ce que je veux dire, essayer de faire un graphique circulaire qui s'étend tout le chemin vers le bord de la parcelle.)
Je préfère le dessin de tartes à la normale dans un système de coordonnées cartésiennes, à l'aide de
geom_arc_bar()
de ggforce. Il nécessite un peu de travail supplémentaire sur l'extrémité avant, parce que nous avons à calculer les angles de nous-mêmes, mais c'est facile et le niveau de contrôle que nous obtenir comme résultat est plus que la peine.J'ai utilisé cette approche dans les réponses précédentes ici et ici.
Les données (à partir de la question):
La pie-le code de dessin:
Pour montrer pourquoi je pense que cette approche est beaucoup plus efficace que le classique (
coord_polar()
) approche, disons que nous voulons les étiquettes à l'extérieur de la tarte plutôt qu'à l'intérieur. Cela crée un couple de problèmes, tels que nous aurons à réglerhjust
etvjust
selon le côté de la tarte d'un label tombe, et nous aussi, nous aurons à faire leparcelle panel plus large que haut pour faire de la place pour les étiquettes sur le côté sans générer excessive de l'espace au-dessus et au-dessous. La résolution de ces problèmes dans les coordonnées polaires approche n'est pas amusant, mais il est trivial dans les coordonnées cartésiennes:
OriginalL'auteur Claus Wilke
Pour ajuster la position du texte de l'étiquette par rapport à la coordonnée, vous pouvez utiliser le
vjust
ethjust
arguments degeom_text
. Cela permettra de déterminer la position de toutes les étiquettes simultanément, de sorte que cela peut ne pas être ce dont vous avez besoin.Sinon, vous pouvez ajuster les coordonnées de l'étiquette. Définir une nouvelle
data.frame
où la moyenne de laCnt
de coordonnées (label_x[i] = Cnt[i+1] + Cnt[i]
) à la position de l'étiquette dans le centre de la tarte. Il suffit de passer cette nouvelledata.frame
àgeom_text
en remplacement de l'originaldata.frame
.En outre, piecharts avoir une certaine interprétation visuelle des défauts. En général, je n'aurais pas les utiliser, en particulier, où de bonnes solutions de rechange existent, par exemple un dotplot:
Par exemple, à partir de ce terrain, il est évident que
Cnt
est plus élevé pour les Kiosque que pour l'Agent, cette information est perdue dans la piechart.Le graphique ne peut pas montrer la différence de magnitude entre l'AGENT et le KIOSQUE, car il ne montre que la taille relative. Le texte est beaucoup plus difficile à interpréter, à mon avis. Cet effet devient plus grande lorsque l'on compare, par exemple 5 catégories. Des livres comme amazon.com/Elements-Graphing-Data-William-Cleveland/dp/... préconisent l'utilisation de cartes comme le dot plot en faveur de la piechart. Juste google pour
pie chart evil
.Malheureusement, cette réponse ne traite pas de problème d'avoir des facettes que les longueurs besoin d'harmonisation, au sein de la facette de la variable.
Je ne suis pas vraiment sûr de ce que tu veux dire. Si vous avez besoin de taille relative entre les facettes, il suffit d'utiliser
scale = free_x
dans l'appel àfacet_wrap
.Je n'utilise pas fact_wrap - je utiliser facet_grid (dans ce cas n'est pas pertinent en tant que balances s'applique à la fois). Comment ne balances l'aide à l'alignement des étiquettes de texte? Je veux dire le fait que pie_text les chiffres devraient être calculée correspondant à la facette (variable Canal).
OriginalL'auteur Paul Hiemstra
Suivantes réponse est partielle, maladroit et je ne vais pas l'accepter.
L'espoir est qu'il va solliciter la meilleure solution.
Il produit le tableau suivant:
Comme vous avez remarqué, je ne peux pas déplacer les étiquettes pour le vert (faible).
Oui, je vous remercie. Je m'en tiendrai à "pas de camembert" de la règle à chaque fois que possible, mais pour les exceptions, votre réponse est la réponse 🙂
Vous êtes complètement à droite pour éviter les tartes autant que possible, mais certaines personnes semblent vraiment aimer. La plupart du temps un bien créé bar-chart est beaucoup plus claire.
OriginalL'auteur topchef