View source: R/add_flowmap_list.R
add_flowmap_list | R Documentation |
add_flowmap_list(
p,
flowdat = NULL,
od = NULL,
nodes = NULL,
outline_linewidth = 0.01,
alpha = 0.8,
nodes_alpha = 0.8,
outline_col = "black",
k_nodes = NULL,
node_buffer_factor = 1.2,
node_radius_factor = 1,
edge_offset_factor = 1,
node_fill_factor = NULL,
edge_width_factor = 1.2,
arrow_point_angle = 45,
add_legend = "none",
legend_nudge_x = 0,
legend_nudge_y = 0,
legend_col = "gray",
legend_gradient = FALSE
)
p |
The plot to which the flowmap should be added. |
flowdat |
A list of input dataframes. See details below. |
od |
As an alternative to |
nodes |
As an alternative to |
outline_linewidth |
The linewidth of the outline of the arrows. |
alpha |
Opacity of the edges. |
nodes_alpha |
Opacity of the nodes. |
outline_col |
Color of the outline of the edges. |
k_nodes |
Number of clusters to group nodes into. If defined, nodes will be clustered hierarchically based on spatial proximity. By default, no clustering will be applied. |
node_buffer_factor |
Controls the distance between the nodes and the edges ( in multiple of the nodes' radii). |
node_radius_factor |
Controls the size of the nodes. |
edge_offset_factor |
Controls the distance between the parallel arrows. |
node_fill_factor |
Controls the downscaling of the fill of the nodes ( as to not outshine the edges ). |
edge_width_factor |
Controls the width of the edges. |
arrow_point_angle |
Controls the pointiness of the edges. |
add_legend |
Add a legend for width to the plot? Must be one of "none","bottom","top","left", or "right". (Experimental) |
legend_nudge_x |
Adjusts the horizontal position of the legend in map units. |
legend_nudge_y |
Adjusts the vertical position of the legend in map units. |
legend_col |
If |
legend_gradient |
If TRUE, the legend color will be a gradient from min to max flow. If FALSE, the legend will be a single color. |
This function creates a list of ggplot objects, each containing a flow map based on the provided data, which match in scales and are thus comparable. It is designed to work with a list of dataframes, where each dataframe represents for example a different day. The function prepares the data for plotting and then adds the flow map to the ggplot object.
The function requires as inputs a list of input dataframes flowdat
which contain for every combination of two nodes a and b the coordinates of these nodes as well as the intensity of flow between those nodes in both directions (a to b, b to a). The dataframe should have the following columns:
id_a: The unique id of node a
id_b: The unique id of node b
xa: The x coordinate of node a
ya: The y coordinate of node a
xb: The x coordinate of node b
yb: The y coordinate of node b
flow_ab: The intensity of flow from node a to node b
flow_ba: The intensity of flow from node b to node a
Alternatively, the function can take as input a list of dataframes od
which contain the origin-destination pairs and the flow between them. The dataframe should have the following columns:
o: The unique id of the origin node
d: The unique id of the destination node
value: The intensity of flow between the origin and destination
In this case, the function also requires a list of dataframes nodes
which contain the coordinates of the nodes. The dataframe should have the following columns:
name: The unique id of the node
x: The x coordinate of the node
y: The y coordinate of the node
The function will impose coord_equal() on the ggplot.
Inspired by flowmap.gl.
A list of ggplots, each corresponding to the input ggplot with an additional polygon layer for the flow arrows and an additional polygon layer for the nodes. One output is generated for each input element (in flowdat
, od
, or nodes
).
Johannes Mast
flowdatA <-
data.frame(
id_a = c("X1","X2","X3","X3","X1"),
id_b = c("X8","X7","X1","X8","X7"),
xa = c(2,14,10,10,2),
ya = c(6,10,9,9,6),
xb = c(10,4,2,10,4),
yb = c(4,10,6,4,10),
flow_ab = c(2,1,1,1,1),
flow_ba = c(8,1,1,1,2))
flowdatB <-
data.frame(
id_a = c("X1","X2","X3","X3","X1"),
id_b = c("X8","X7","X1","X8","X7"),
xa = c(2,14,10,10,2),
ya = c(6,10,9,9,6),
xb = c(10,4,2,10,4),
yb = c(4,10,6,4,10),
flow_ab = c(2,3,2,0.2,1),
flow_ba = c(3,3,2,1,5))
flowdatC <-
data.frame(
id_a = c("X1","X2","X3","X3","X1"),
id_b = c("X8","X7","X1","X8","X7"),
xa = c(2,14,10,10,2),
ya = c(6,10,9,9,6),
xb = c(10,4,2,10,4),
yb = c(4,10,6,4,10),
flow_ab = c(1,1,2,1,1)/2,
flow_ba = c(3,3,2,1,5)/3)
list_of_flowdats <- list(flowdatA, flowdatB, flowdatC)
library(ggplot2)
base_plot <-
ggplot()+
theme_bw()+
coord_equal()
flowmap_plots <-
base_plot |>
add_flowmap_list(list_of_flowdats,
legend_gradient = TRUE,
add_legend = "bottom",
k_nodes = 3)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.