briatte / briatte/ggnetwork

geom_nodes() requires more colors than there are nodes

Open
#34 1 comment 0 reactions 1 assignee Claimed by @briatte View on GitHub
bug question
Dominant language
HTML
Stars
154
Forks
29
PR merge metrics
No merged PRs in 30d

Description

> [Cross-posted at StackOverflow](https://stackoverflow.com/q/53330320/635806).

Create an igraph object with five vertices and two edges:

```r
test <- structure(list(5, TRUE, c(0, 3), c(4, 1), c(0, 1), c(1, 0), c(0, 1, 1, 1, 2, 2), c(0, 0, 1, 1, 1, 2), list(c(1, 0, 1), structure(list(), .Names = character(0)),list(name = c("3", "6", "7", "2", "1")), list(weight = c(3.30310760667904, 3.55724789915966))), environment), class = "igraph")
```

Check the number of nodes and edges:

```r
igraph::ecount(test)
#> [1] 2
igraph::vcount(test)
#> [1] 5
```

The following code works (it should not work, notice that the number of color values in geom_nodes() is wrong, there should be five values, but 7 are given):

```r
ggplot(test, aes(x = x, y = y, xend = xend, yend = yend)) +
geom_edges(arrow = arrow(), color = 'black') +
geom_nodes(size =10, aes(color=1:7/(7))) +
scale_color_gradient(low = "green", high = "red")
```

See plot [here](https://pasteboard.co/HN4KjG7.png).

If the correct number of values for `geom_nodes(aes(color=))` is used instead, an error is generated:

```r
ggplot(test, aes(x = x, y = y, xend = xend, yend = yend)) +
geom_edges(arrow = arrow(), color ='black') +
geom_nodes(size =10, aes(color=1:5/(5))) +
scale_color_gradient(low = "green", high = "red")
#> Error: Aesthetics must be either length 1 or the same as the data (7): colour
```

Notice that `geom_nodes` seems to require that `color` = `nodes + edges`, why is this?

Is there a way around this?

If there are 7 colors passed, how does it decide which 5 to use for the node colors?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.