igraph / python-igraph

Python interface for igraph
GNU General Public License v2.0
1.3k stars 249 forks source link

Matplotlib backend: 'diamond' shape is too small, edges do not connect to it #751

Open szhorvat opened 9 months ago

szhorvat commented 9 months ago

Describe the bug

With the Matplotlib backend, the 'diamond' shape has two problems:

To reproduce

igraph.plot(Graph.Full(3), backend='matplotlib', vertex_size=60, vertex_color='blue', vertex_shape=['rectangle', 'circle', 'diamond'])
image

The Cairo backend does not suffer from this (although it does cut the edges of the drawing off)

igraph.plot(Graph.Full(3), backend='cairo', vertex_size=60, vertex_color='blue', vertex_shape=['rectangle', 'circle', 'diamond'])
image

Version information

0.11.3

szhorvat commented 9 months ago

Tip: A good starting point for sizes that look visually similar is to scale by area. See https://mathematica.stackexchange.com/a/85094/12

iosonofabio commented 9 months ago

Just FYI, there are like 50 bugs of this type in the plotting, and they are all related to the same fundamental issue, lack of sufficiently flexible locators in mpl. I don't suggest you spend a whole lot of time describing in detail each and every one of them.

Tamas and I met with a few mpl folks to try and sort out the issue. Unfortunately it's not an easy fix for them and my time for this kind of operations is becoming more limited. It's a big job and I don't think worth it before the new Python interface is out.

Hope this saves you some frustration.

szhorvat commented 9 months ago

I assume you are referring to the edges not joining up properly, right?

There's also the issue of the visual sizes. Perhaps the two issues should be split.

I can help with producing relative coordinates that make the different shapes look the same size if someone can put these into the code ...

iosonofabio commented 9 months ago

As I already wrote, it's a big job and cannot be easily split into bit-sized quick fixes, AFAICT.

If you're interested in taking it on, perhaps you could start by reviewing our approach using custom Collections and the on-the-fly transforms they contain. From there, the most efficient path would probably be to reach out to the mpl folks - happy to connect you if you want. You would have to coordinate with them about a new system for dynamic coordinates and transforms, and see how that helps.