Skip to content

Incorrect edge attributes depending on loops and end_cap #115

@daniel-munro

Description

@daniel-munro

This seems related to #62, but that issue was closed and I'm seeing this in version 1.0.1.

The below example contains a loop and specifies end_cap for the edges, and one of the edges is the wrong color. The next examples show that it plots correctly when the loop is replaced with a non-loop edge, when the loop is listed after the other edges, and when end_cap is not specified.

The problem persists when using an undirected graph, when using geom_edge_link or geom_edge_arc instead of geom_edge_fan, and when omitting the geom_edge_loop call.

library(ggraph)
library(igraph)

## Incorrect when loop listed first
d <- data.frame(node1 = c('C', 'A', 'B'),
                node2 = c('C', 'B', 'A'),
                value = c('Y', 'X', 'X'))
g <- graph_from_data_frame(d, directed = TRUE)
ggraph(g, layout = 'nicely') +
  geom_edge_fan(aes(color = value),
                end_cap = circle(5, 'mm')) +
  geom_edge_loop(aes(color = value)) +
  geom_node_label(aes(label = name))

## Correct when no loop
d <- data.frame(node1 = c('C', 'A', 'B'),
                node2 = c('D', 'B', 'A'),
                value = c('Y', 'X', 'X'))
g <- graph_from_data_frame(d, directed = TRUE)
ggraph(g, layout = 'nicely') +
  geom_edge_fan(aes(color = value),
                end_cap = circle(5, 'mm')) +
  geom_edge_loop(aes(color = value)) +
  geom_node_label(aes(label = name))

## Correct when loop listed third
d <- data.frame(node1 = c('A', 'B', 'C'),
                node2 = c('B', 'A', 'C'),
                value = c('X', 'X', 'Y'))
g <- graph_from_data_frame(d, directed = TRUE)
ggraph(g, layout = 'nicely') +
  geom_edge_fan(aes(color = value),
                end_cap = circle(5, 'mm')) +
  geom_edge_loop(aes(color = value)) +
  geom_node_label(aes(label = name))

## Correct when no end_cap specified
d <- data.frame(node1 = c('C', 'A', 'B'),
                node2 = c('C', 'B', 'A'),
                value = c('Y', 'X', 'X'))
g <- graph_from_data_frame(d, directed = TRUE)
ggraph(g, layout = 'nicely') +
  geom_edge_fan(aes(color = value)) +
  geom_edge_loop(aes(color = value)) +
  geom_node_label(aes(label = name))

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions