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:
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:
ma question: y a-t-il un moyen de tracer de "belles" flèches épaisses?
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 dcast
reshape2
ou data.table
paquet). Mais cette fois, j'ai essayé d'utiliser base
reshape
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")))
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".
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.