Để vẽ mũi tên trong ggplot, tôi sử dụng geom_segment và arrow = arrow(). Tôi muốn kích thước đầu mũi tên khớp với chiều rộng phân đoạn (hoặc kích thước). Tuy nhiên, mũi tên không nhận biết biến trực tiếp từ đối số dữ liệu trong ggplot và phải chỉ định data.frame chứa biến bằng toán tử $. Điều này gây ra sự ngắt quãng giữa các giá trị được sử dụng để vẽ đường kẻ và các giá trị được sử dụng để vẽ đầu mũi tên (đầu mũi tên lớn nhất có thể nằm trên đoạn mỏng nhất).Tạo kích thước khớp đầu mũi tên (hoặc lwd) trong ggplot2
Ví dụ:
d <- structure(list(Process = structure(c(2L, 1L, 1L, 1L, 2L, 2L,
1L, 1L, 2L, 1L, 2L), .Label = c("First", "Second"), class = "factor"),
x.sink = c(1, 3, 1, 2, 2, 3, 3, 2, 2, 2, 2), y.sink = c(1,
1, 1, 2, 2, 1, 1, 1, 1, 2, 2), x.source = c(2, 2, 2, 2, 2,
2, 2, 1, 1, 1, 3), y.source = c(2, 2, 2, 1, 1, 1, 1, 1, 1,
2, 1), offset = c(1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1),
Std.Flux = c(0.179487179487179, 0.170940170940171, 0.944444444444444,
0.0854700854700855, 0.726495726495726, 0.128205128205128,
0.213675213675214, 0.213675213675214, 0.128205128205128,
0.106837606837607, 1)), .Names = c("Process", "x.sink", "y.sink",
"x.source", "y.source", "offset", "Std.Flux"), class = "data.frame", row.names = c(NA,
-11L))
p <- qplot(data=d,
#alpha=I(0.4),
colour=Process,
size=Std.Flux,
xlim=c(0,4),
ylim=c(0,3),
x=x.source+as.numeric(Process)/10,
y=y.source+as.numeric(Process)/10,
xend=x.sink+as.numeric(Process)/10,
yend=y.sink+as.numeric(Process)/10,
geom="segment",
arrow = arrow(type="closed",
length = unit(d$Std.Flux,"cm")))
print(p)
Bất kỳ lời đề nghị?
tôi nghĩ đó là một sự giám sát; đáng để đăng một yêu cầu tính năng trên github – baptiste