gpt4 book ai didi

svg - 在 ipython 中使用 igraph 绘制顶点标签的问题

转载 作者:行者123 更新时间:2023-12-01 02:08:52 24 4
gpt4 key购买 nike

我通常在 IPython notebook 中工作,我在 Windows 上使用命令打开它

ipython qtconsole --matplotlib inline

我目前正在使用 IPython QtConsole 3.0.0、Python 2.7.9 和 IPython 3.0.0。

我想绘制一个图表,连同它的标签
from igraph import *
g = Graph.Lattice([4,4],nei=1,circular=False)
g.vs["label"]=[str(i) for i in xrange(16)]
plot(g, layout="kk")

这样,我得到了图形的内联图,但是有 没有标签,对于每个缺失的标签,我都会收到以下消息错误
link glyph0-x hasn't been detected!

其中 x 是某个整数。

我还尝试直接在 plot() 中指定标签。命令,使用 vertex_label = ... ,但没有任何效果。

在我看来,标签定义正确,问题存在于 ipython 笔记本和/或它用于绘制图形的模块中。谁能帮我解决这个问题?

我还使用以下命令尝试了所有可能的图形格式 SVG 和 PNG,但问题仍然存在。
%config InlineBackend.figure_format = 'svg'
%config InlineBackend.figure_format = 'png'

最佳答案

这个问题可能存在于 Qt 及其 SVG 实现的深处。设置图形格式为png没有帮助,因为 igraph 仅提供图形对象的 SVG 表示,所以我怀疑 IPython 先创建 SVG 表示,然后将其光栅化为 PNG。这个问题现在只能通过修补 Plot 来解决。类(class) igraph/drawing/__init__.py ;必须删除_repr_svg_类中的方法并添加以下方法:

def _repr_png_(self):
"""Returns a PNG representation of this plot as a string.

This method is used by IPython to display this plot inline.
"""
# Create a new image surface and use that to get the PNG representation
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(self.bbox.width),
int(self.bbox.height))
context = cairo.Context(surface)
# Plot the graph on this context
self.redraw(context)
# No idea why this is needed but Python crashes without this
context.show_page()
# Write the PNG representation
io = BytesIO()
surface.write_to_png(io)
# Finish the surface
surface.finish()
# Return the PNG representation
return io.getvalue()

在 igraph 的 Python 接口(interface)的官方代码中做这个修改,我有点不安; SVG 表示通常更好(并且可扩展),但它似乎也在 Windows 和 Mac OS X 上引起问题。如果任何阅读这篇文章的人对 Qt 及其 SVG 实现有更多经验,我会很感激能帮助我们找到这个错误的根本原因,这样我们就可以在 igraph 中保留绘图的 SVG 表示。

关于svg - 在 ipython 中使用 igraph 绘制顶点标签的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com