Comment dessiner une belle flèche dans ggplot2

je suis entrain de créer un ggplot graphique où je veux avoir quelques flèches entre deux points. La tâche principale se fait facilement avec geom_line(arrow = arrow()). Cependant, je veux avoir quelques" belles " flèches épaisses. Redimensionnement de la flèche via size= n'aide pas, car il gâche complètement la tête de la flèche. J'illustre mes Problèmes:

Créer des exemples de données et d'une parcelle:

 NAME <- c("A", "A", "B", "B", "C", "C")
 YEAR <- c(2016, 2011, 2016, 2011, 2016, 2011)
 YEAR <- as.factor(YEAR)
 VALUE <- c(1, 4, 1, 5, 2, 8)
 DATA <- data.frame(NAME, YEAR, VALUE)

ggplot(DATA, aes(x=VALUE, y=NAME)) + 
  geom_point(size=5, aes(colour=YEAR)) +
  geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"))

L'résultant de l'intrigue ressemble à ça:

plot1

maintenant j'ai elle a cherché à "épaissir" les flèches...

ggplot(DATA, aes(x=VALUE, y=NAME)) + 
  geom_point(size=5, aes(colour=YEAR)) +
  geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"), size = 3)

C'est le résultat indiqué ici:

plot2

ma question: y a-t-il un moyen de tracer de "belles" flèches épaisses?

20
demandé sur 989 2016-06-24 11:27:50

2 réponses

j'ai l'habitude d'utiliser geom_segment pour créer la flèche. Mais pour ce faire, nous devons modifier les données du format" long "au format" large " (généralement en utilisant dcastreshape2 ou data.table paquet). Mais cette fois, j'ai essayé d'utiliser basereshape fonction.

ggplot(DATA, aes(x=VALUE, y=NAME)) + 
  geom_point(size=5, aes(colour=YEAR)) +
  geom_segment(data = reshape(DATA, v.names="VALUE", idvar = "NAME", timevar = "YEAR", direction = "wide"),
               aes(x=VALUE.2011, xend=VALUE.2016, y=NAME, yend=NAME), size = 2,
               arrow = arrow(length = unit(0.5, "cm")))

arrow.segment

EDIT: je viens de découvrir que la même question s'applique aux flèches de type "fermé". Pour l'instant, essayez de sauvegarder le graphique en tant que graphique vectoriel (pdf ou svg, en utilisant ggsave ou Export menu dans les Parcelles de l'onglet). Le résultat n'est pas "malpropre".

svg

8
répondu zyurnaidi 2016-06-24 14:40:06

Dans le dernier (et je veux dire devtools::install_github("tidyverse/ggplot2") dernière, au moment d'écrire cette réponse - je suis sûr qu'ils mainline it soon enough) version de ggplot2, est un linejoin argument geom_segment. En utilisant linejoin='mitre' fournira des bords croustillants. Voir le pour les détails.

4
répondu Carl 2017-07-30 02:18:29