Currently, I'm making a map that depicts the migration flows of people who have finished their university degrees and decide to move to a different Dutch city after their studies. By following Anita Graser's blog post and Konrad M. Lawson's tutorial, I've so far made the following map:
If you look closely, then perhaps one can see that for four locations, I've made duplicate points that are almost at the exact same location as the original cities. These duplicates are in Groningen (in the North), the center of the Randstad (in the West), Tilburg (South), and Maastricht (South East). I've made these duplicates because I also would like to show the amount of students that decide to remain within the same cities upon graduation. The intra-city or intra-regional migration is something I'd like to depict by means of looped arrows.
However, I don't have much success so far with creating these loops. Here is what I've made so far in the West:
One can only see this arrow upon close examination. However, I want people to be able to see it at the same zoom level as the first image, and I'd like it to look like a loop. Something like this is what I'm imagining:
The best idea I can come up with so far is to manually add centroids for the arrows at locations in such a way that the arrows have to make a big detour or a loop. I'm not quite sure how to create these arrows though. On Graser's blog, the following code is used in the geometry generator of the arrows in the virtual layer to adjust them all at once:
difference(
difference(
make_line(
start_point($geometry),
centroid(
offset_curve(
$geometry,
length($geometry)/-5.0
)
),
end_point($geometry)
),
buffer(start_point($geometry), 0.01)
),
buffer(end_point( $geometry), 0.01)
So my question is: how to manually adjust the coordinates of each individual centroid of every arrow in such a way that loops can be made?