I've got data containing vectors' coordinates and their characteristics - success_rate
and prop
:
ex_data <- structure(list(group = c("group A", "group A", "group A", "group A",
"group A", "group A", "group C", "group C", "group C", "group C",
"group C", "group W", "group W", "group W", "group W", "group W"
), category = c(5, 4, 3, 2, 1, 6, 5, 1, 2, 3, 4, 1, 4, 5, 2,
3), success_rate = c(0.816037735849057, 0.938775510204082, 0.653061224489796,
0.985915492957746, 0.934306569343066, 1, 0.979166666666667, 0.887323943661972,
0.319587628865979, 0.721590909090909, 0.941176470588235, 0.689320388349515,
0.338028169014085, 0.396551724137931, 0.7375, 0.763948497854077
), x0 = c(24.5, 24.5, 23.7, 22.6, 28.6, 27.6, 27.2, 27.4, 15.7,
25.5, 24.2, 21.4, 17.5, 9.9, 23.6, 29), y0 = c(21.2, 27.9, 96.6,
43.9, 65.1, 71.5, 34.3, 71.2, 47.9, 88, 36, 86.9, 49.4, 41.3,
85.6, 16.7), x1 = c(35.2, 36.5, 34, 32.9, 39.4, 40.2, 35.9, 31.6,
63.1, 29.5, 35.9, 35.4, 61.4, 54, 37.3, 37.2), y1 = c(5.8, 33.6,
96.8, 70, 64.8, 96.6, 7.3, 64.9, 63.1, 89.7, 38.5, 95, 59.3,
32.2, 77.9, 12), prop = c(0.124926340601061, 0.0866234531526223,
0.0288744843842074, 0.041838538597525, 0.0807307012374779, 0.0271066588096641,
0.0365853658536585, 0.0541158536585366, 0.0739329268292683, 0.134146341463415,
0.0259146341463415, 0.0787461773700306, 0.108562691131498, 0.0443425076452599,
0.0611620795107034, 0.178134556574924)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -16L))
I wan't to make a graphic of vectors for each group
that would use prop
as a size aesthetic. Unfortunetely, I don't think in case of arrows size aesthetics doesn't work well as its resizing the whole arrow which often look bad:
ggplot(ex_data) +
geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate, size = prop),
arrow = arrow(length = unit(0.2, "cm"), ends = 'last', type = 'closed')) +
facet_wrap(~group) +
scale_color_viridis_c()
So I would like to control only the size of the arrowhead with prop
variable. Unfortunetely, arrowheads are not geom_segment
aesthetic and the only way to control their sizes is to supply them with separate vector. It works nice for a single group:
ex_data %>%
filter(group == 'group C') %>%
ggplot() +
geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate),
arrow = arrow(length = unit(filter(ex_data, group == 'group C')$prop * 3, "cm"), ends = 'last', type = 'closed')) +
facet_wrap(~group) +
scale_color_viridis_c()
but not with facet_wrap
:
ggplot(ex_data) +
geom_segment(aes(x = x0, y = y0, xend = x1, yend = y1, color = success_rate),
arrow = arrow(length = unit(ex_data$prop * 3, "cm"), ends = 'last', type = 'closed')) +
facet_wrap(~group) +
scale_color_viridis_c()
You can notice that sizes of arrowheads for group C
are not valid anymore (eg. the upper arrow should have the biggest arrowhead, while it has the smallest). My original data has much more groups and creating separate plots would be really tedious. Is there any workaround for this?