为什么曲线边缘在 igraph 绘图中不可见?
Why curved edges are invisible in igraph plotting?
在使用 cairo PDF 绘制的 python igraph 中,由 edge_curved = X
或 autocurve = True
设置的弯曲边缘在 PDF 输出中是不可见的。同样代表PNG。箭头和所有其他图形元素都是可见的。设置边缘笔直,它们变得可见。这是一个最小的例子:
import igraph
g = igraph.Graph.Erdos_Renyi(n = 23, m = 123)
igraph.plot(g, autocurve = True, edge_width = 0.02)
边缘宽度低于 0.051 时,弯曲边缘始终不可见。实际上,所有边缘宽度 >= 0.051 和 < 1.0 在 PDF 上看起来都一样,可能小于 1.0 的数字向上舍入,<= 0.05 舍入为 0.0。在 PNG 图上,此边缘宽度范围存在明显差异。
因此,如果绘制曲线边缘,解决方案是至少使用 edge_width = 0.051
。有趣的是,直边在边缘宽度 0.051 以下仍然可见,但它们看起来不会变薄,宽度似乎四舍五入到大概 1.0。在python igraph的源码中可以看到,edge.width
直接传给了cairo.Context.set_line_width()
。我在很多地方都看到了后者与低于 1.0 的浮点数一起使用,可能结果取决于实际的 cairo 表面。
在使用 cairo PDF 绘制的 python igraph 中,由 edge_curved = X
或 autocurve = True
设置的弯曲边缘在 PDF 输出中是不可见的。同样代表PNG。箭头和所有其他图形元素都是可见的。设置边缘笔直,它们变得可见。这是一个最小的例子:
import igraph
g = igraph.Graph.Erdos_Renyi(n = 23, m = 123)
igraph.plot(g, autocurve = True, edge_width = 0.02)
边缘宽度低于 0.051 时,弯曲边缘始终不可见。实际上,所有边缘宽度 >= 0.051 和 < 1.0 在 PDF 上看起来都一样,可能小于 1.0 的数字向上舍入,<= 0.05 舍入为 0.0。在 PNG 图上,此边缘宽度范围存在明显差异。
因此,如果绘制曲线边缘,解决方案是至少使用 edge_width = 0.051
。有趣的是,直边在边缘宽度 0.051 以下仍然可见,但它们看起来不会变薄,宽度似乎四舍五入到大概 1.0。在python igraph的源码中可以看到,edge.width
直接传给了cairo.Context.set_line_width()
。我在很多地方都看到了后者与低于 1.0 的浮点数一起使用,可能结果取决于实际的 cairo 表面。