Parcelle étiquettes à des fins de lignes
J'ai les données suivantes (temp.dat
voir la note de fin de données complètes)
Year State Capex
1 2003 VIC 5.356415
2 2004 VIC 5.765232
3 2005 VIC 5.247276
4 2006 VIC 5.579882
5 2007 VIC 5.142464
...
et je peux produire le tableau suivant:
ggplot(temp.dat) +
geom_line(aes(x = Year, y = Capex, group = State, colour = State))
Au lieu de la légende, j'aimerais les étiquettes pour être
- de couleur le même que la série
- à la droite du dernier point de données pour chaque série
J'ai remarqué baptiste commentaires de la réponse dans le lien suivant, mais quand j'essaye d'adapter son code (geom_text(aes(label = State, colour = State, x = Inf, y = Capex), hjust = -1)
) le texte n'apparaît pas.
ggplot2 - annoter à l'extérieur de la parcelle
temp.dat <- structure(list(Year = c("2003", "2004", "2005", "2006", "2007",
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2003",
"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011",
"2012", "2013", "2014", "2003", "2004", "2005", "2006", "2007",
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2003",
"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011",
"2012", "2013", "2014"), State = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("VIC",
"NSW", "QLD", "WA"), class = "factor"), Capex = c(5.35641472365348,
5.76523240652641, 5.24727577535625, 5.57988239709746, 5.14246402568366,
4.96786288162828, 5.493190785287, 6.08500616799372, 6.5092228474591,
7.03813541623157, 8.34736513875897, 9.04992300432169, 7.15830329914056,
7.21247045701994, 7.81373928617117, 7.76610217197542, 7.9744994967006,
7.93734452080786, 8.29289899132255, 7.85222269563982, 8.12683746325074,
8.61903784301649, 9.7904327253813, 9.75021175267288, 8.2950673974226,
6.6272705639724, 6.50170524635367, 6.15609626379471, 6.43799637295979,
6.9869551384028, 8.36305663640294, 8.31382617231745, 8.65409824343971,
9.70529678167458, 11.3102788081848, 11.8696420977237, 6.77937303542605,
5.51242844820827, 5.35789621712839, 4.38699327451101, 4.4925792218211,
4.29934654081527, 4.54639175257732, 4.70040615159951, 5.04056109514957,
5.49921208937735, 5.96590909090909, 6.18700407463007)), class = "data.frame", row.names = c(NA,
-48L), .Names = c("Year", "State", "Capex"))
- Je voudrais juste créer un bloc de données avec uniquement les données que vous voulez tracer comme
geom_text(data = temp.dat[cumsum(table(temp.dat$State)), ], aes(label = State, colour = State, x = Year, y = Capex))
mais il y a peut être un plus gg-façon de faire les choses
Vous devez vous connecter pour publier un commentaire.
À utiliser Baptiste idée, vous devez désactiver l'écrêtage. Mais quand vous le faites, vous obtenez des ordures. En outre, vous devez supprimer la légende, et, pour
geom_text
, sélectionnez des dépenses d'Investissements pour l'année 2014, et d'augmenter la marge pour faire de la place pour les étiquettes. (Ou vous pouvez régler lehjust
paramètre pour déplacer les étiquettes à l'intérieur de la parcelle du panneau.) Quelque chose comme ceci:Mais, c'est le genre d'intrigue qui est parfait pour
directlabels
.Modifier Pour augmenter l'espace entre la fin et les étiquettes:
directlabels
paquet. Je ne pouvais pas le voir dans la documentation de façon à augmenter manuellement l'espace horizontal entre les points d'extrémité et le texte de l'étiquette. Quelle est la meilleure façon de le faire?package ‘directlabels’ is not available (for R version 3.3.2)
. Je ne peux pas trouver la FAQ du site pour l'emballage ainsi. Est-il encore vivant?quadprog
?quadprog
v1.5-7 est là. (La dernière version de R est la version 3.6.0.) Maisquadprog
devez installer avecdirectlabels
. Avez-vous essayé de réinstallerdirectlabels
?Une nouvelle solution est d'utiliser
ggrepel
:Cette question est ancienne mais l'or, et j'en fournir une autre réponse pour las ggplot folk.
Cette solution de principe peut être appliqué de façon très générale.
Et maintenant, nous pouvons sous-ensemble de nos données
La dernière pretty_breaks partie est juste pour fixer l'axe ci-dessous.
Ne sais pas si c'est la meilleure façon, mais vous pouvez essayer la (jouer un peu avec
xlim
pour un réglage correct de la limite):Vous n'avez pas émuler @Baptiste de la solution à 100%. Vous avez besoin d'utiliser
annotation_custom
et boucle à travers tous vosCapex
's:(Vous aurez envie de changer le jaune si vous gardez le fond blanc.)