-
-
Notifications
You must be signed in to change notification settings - Fork 206
fix: Fail if "layout"
attribute doesn't match the number of vertices
#1880
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
I think a complete fix is only possible in the C core. We need support for attributes with vector values. I proposed this here for 1.0: But realistically, @ntamas and I just don't have the capacity to get this done for the 1.0 release, which is due in September. My suggestion is to not put too much effort into this on the R side until it can be fixed in the C core. Perhaps discourage using @ntamas Are there any hooks in the attribute handler that would allow updating such attributes upon vertex deletion/addition? I don't think there are any. Note that |
Thanks. I will augment the warning to suggest using x and y and that should be good enough for now |
No, not until we implement some kind of a generic event emitter / listener system that would allow third-party code to hook into anything that happens with a graph. |
An error would be better here. We discussed before that this should be a vertex attribute, AFAIR this isn't something that the C core currently supports. |
The R core could support it, though, with #1894. What would it take to make the following code produce the right results? library(igraph, warn.conflicts = FALSE)
g <- make_full_graph(10)
V(g)$layout <- layout_in_circle(g)
plot(g) Created on 2025-06-26 with reprex v2.1.1 |
Cant remember all discussions here: Should I turn the warning into an error message and then merge? |
My question in #1880 (comment) is still relevant. |
I'll investigate but I think this would be a big change.
|
1. The code shows it’s possible to store them? 2. We own the plotting code?
|
Specifically, this works with #1894: library(igraph, warn.conflicts = FALSE)
g <- make_full_graph(10)
V(g)$layout <- layout_in_circle(g)
V(g)$layout
#> [,1] [,2]
#> [1,] 1.000000 0.000000e+00
#> [2,] 0.809017 5.877853e-01
#> [3,] 0.309017 9.510565e-01
#> [4,] -0.309017 9.510565e-01
#> [5,] -0.809017 5.877853e-01
#> [6,] -1.000000 1.224647e-16
#> [7,] -0.809017 -5.877853e-01
#> [8,] -0.309017 -9.510565e-01
#> [9,] 0.309017 -9.510565e-01
#> [10,] 0.809017 -5.877853e-01 Created on 2025-07-05 with reprex v2.1.1 |
Then let's make it happen. I could adapt the plot code to also check for a vertex layout attribute |
There are some issue with this approach. Since vector attributes are not supported in C yet, it will not be possible to export these to the standard formats such as GML. In the long term it would be good to do this, but I'm wondering if it's a better approach to wait until the C core supports it, or at least wait until upgrading to C/igraph 1.0. I have an issue open for this here: igraph/igraph#2744 Realistically, we probably won't have the capacity to make it happen for 1.0, but I'd like to be optimistic and take another look ... |
(To be clear, IMO this is absolutely the right way to do it. My concern is making this an R-specific feature, especially before we had the opportunity to take a good look at it in C and determine what interface is feasible.) |
We also need to check subsetting and subset assignment for such attributes.
In the other PR.
|
We could also make V(g)$layout <- … result in setting the x and y vertex
attributes. Or perhaps create a layout setting function.
I need to review the attribute code to give a better assessment.
|
How I envisioned this working was exactly
And of course the biggest issue: Implementing this feature with the very limited capacity we have ... |
How about going with @krlmlr's design, and setting the |
Would this be a separate PR? |
Let's turn this into an error then, and address the other topics later. |
@krlmlr ok to merge if everything passes? |
"layout"
attribute doesn't match the number of vertices
Thanks, merging. |
Trying to tackle #219.
The overarching issue is that if the layout is saved as a graph attribute (
g$layout
), independent on how it is done, there is no checks implemented if the layout matrix can actuallyserve as a layout (that is, if it has the correct number of rows).
This leads to weird behaviour of the plot function.
This PR could be the starting point for a refactoring. Currently, it only adds a warning if the layout does not match the graph. @szhorvat could this be a good start?
Created on 2025-06-24 with reprex v2.1.1