Skip to content

Y position is misaligned when rendering with matplotlib

Bug report

When rendering to a matplotlib figure, the graph-tool plot is slightly misaligned on the y-axis. This can be observed by altering the y limit in matplotlib.

Example

import matplotlib.pyplot as plt
import graph_tool.all as gt

g = gt.price_network(500)
pos = gt.sfdp_layout(g)

plt.switch_backend('cairo')
fig, ax = plt.subplots()
ax.set_aspect(1)
res = gt.graph_draw(g, pos=pos, mplfig=ax)
ylim = ax.get_ylim()
xlim = ax.get_ylim()
ax.set_ylim(ylim[0]/2, ylim[1]/2)
ax.set_xlim(xlim[0]/2, ylim[1]/2)

plt.savefig('gt_test.pdf')

Result: gt_test.pdf

These warnings are produced:

/usr/lib/python3.8/site-packages/graph_tool/draw/cairo_draw.py:637: UserWarning: Unknown parameter: layout_K
  warnings.warn("Unknown parameter: " + k, UserWarning)
/usr/lib/python3.8/site-packages/graph_tool/draw/cairo_draw.py:637: UserWarning: Unknown parameter: update_layout
  warnings.warn("Unknown parameter: " + k, UserWarning)

You will notice that the nodes and edges are visible slightly above the top, and are clipped too soon on the bottom. Despite modifying x limits in the same way the clipping works correctly there. I've tried plotting other things with ax.plot() and ax.scatter() and those things will be clipped correctly, so this seems graph-tool specific.

I also noticed making this demo that the arrow heads are not hidden outside the matplotlib axes, but I guess that's probably a separate issue.

Platform information

  • Are you running the latest graph-tool version?
  • Do you observe the problem with the current git version?
  • Did you compile graph-tool manually?

(Compiled using the PKGBUILDs available on the Arch User Repository. I should note also that I had to use this patch to fix the boost coroutine header included with Arch before it would compile.)

  • OS: Arch Linux
  • Python: 3.8 (installed from arch repos)
  • Matplotlib: 3.1.3 (installed from arch repos)
  • Boost libs: 1.72 (installed from arch repos)
  • Compiler: GCC 9.2.0

Behaviour seems identical between latest release and git version.