Meu objetivo é criar linhas curvas em um mapa (conectando pontos), com uma seta de um lado. Essas linhas serão semitransparentes. Parece que a melhor maneira de atingir meu objetivo é usar geom_curve
(embora outras ggplot2
soluções também sejam ótimas).
Como tal, digamos que tenho este enredo de brinquedo:
library(tidyverse)
library(ggplot2)
data <- data.frame(x = 4, y = 20, xend = 7, yend = 15)
ggplot(data) + geom_curve(aes(x = x, y = y, xend = xend, yend = yend),
arrow = arrow(length = unit(0.17, "npc"), type="closed", angle=20),
colour = "red",
linewidth = 5,
angle = 90,
alpha=.2,
lineend = "butt",
curvature = -0.4,
)
O problema que estou enfrentando é que, ao usar geom_curve
uma linha semitransparente, a seta aparece com diferentes níveis de transparência quando quero que fique uniforme. Como posso evitar isso?
Esta questão está intimamente relacionada com: A estética alfa mostra o esqueleto da flecha em vez de uma forma simples - como evitá-lo? , exceto que ele usa geom_curve
em vez de geom_segment
. A resposta brilhante ( https://stackoverflow.com/a/60587296/2049545 ) define uma nova geometria ( geom_arrowbar
). Seria possível modificar isso para ser usado geom_curve
? Também sinalizarei outra resposta que aponta para geom_gene_arrow
( https://stackoverflow.com/a/60655018/2049545 ) - isso pode ser usado com linhas curvas? Ou existe alguma outra solução que funcionaria?
Para realmente fazer isso corretamente, seria necessário escrever uma nova versão
curveGrob
e um geom totalmente novo.Felizmente, alguém já o fez. O pacote ggarrow não publicado da Teunbrand inclui um
geom_arrow_curve
, então você pode fazer: