我想要一條曲線,從一端到另一端有一個顏色漸變,最后有一個箭頭,使用ggplot().
使用geom_curve我可以得到正確的曲線和一個漂亮的箭頭。但是,我無法為此添加顏色漸變。我可以通過使用來應用我正在尋找的顏色漸變和曲線,geom_bezier2但看起來有多個箭頭相互疊加。有沒有辦法geom_bezier2用看起來像線的箭頭來實作geom_curve線?
#curved line with correct arrow but no color gradient
ggplot()
geom_curve(
aes(x = -75, y = 42.5, xend = -85, yend = 30.5, size=3),
curvature = -0.2,
lineend = "round",
arrow = arrow(length = unit(0.3, "cm")))
#data frame for bezier
bezArrow <- data.frame(
x = c(-75, -77, -85),
y = c(42.5, 35, 30.5),
color = c(3, 2, 1))
#curved line with color gradient but not the arrow I'm looking for
ggplot()
geom_bezier2(data = bezArrow, aes(x = x, y = y, color = color, linewidth = 3),
lineend = 'round',
arrow = arrow(length = unit(0.3, "cm"), ends = 'last'))
scale_color_gradient(high = 'grey', low = 'black')


uj5u.com熱心網友回復:
這在ggforce中實際上是不可能的,但你可以這樣做:
library(tidyverse)
ggforce:::bezierPath(bezArrow$x, bezArrow$y, 100) %>%
as.data.frame() %>%
rename(x = V1, y = V2) %>%
mutate(xend = lead(x), yend = lead(y),
color = approx(bezArrow$x, bezArrow$color, xout = x)$y,
alpha = c(rep(0, n() - 2), 1, 1)) %>%
ggplot(aes(x, y, xend = xend, yend = yend, color = color))
geom_segment(size = 3, lineend = "round", na.rm = TRUE)
geom_segment(size = 3, lineend = "round", aes(alpha = alpha),
arrow = arrow(length = unit(0.3, "cm")), na.rm = TRUE)
scale_color_gradient(high = 'grey', low = 'black')
scale_alpha_identity()

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529444.html
標籤:rggplot2
