我用自己编写的“树框架”坐标计算树可视化/绘图(因此我计算节点和连接的坐标)。我在python 3.9下工作,我使用matplotlib(3.3.3版)绘制树,并以这种方式将matplotlib的“结果”存储在一个文件中:
ptr_fig.set_canvas(matplotlib.backends.backend_agg.FigureCanvasAgg(ptr_fig))
ptr_fig.savefig(temporary_image_file_path, dpi = 100, format = "png")
所有这些工作通常都很好而且完美(这里有几个例子,我在我的框架中实现了不同的树图样式):
这是我目前不理解的事情!这里出了什么问题?我认为这是 matplotlib 的任何错误设置,但我不知道是什么
备注:上面的图片实际上非常大,分辨率为 56200 * 5200
在 MS-Edge 中查看的另一张大图(因此图片包含在 html 中):
以下是我在 PRINCIPLE 中的工作方式的一些背景信息(当然,现实中的细节要复杂得多 ==> 我只描述了需要的东西和简化的东西,但原则上我当然写的都是真的)
使用我的树框架,我为可视化树计算所有节点和连接的坐标
- 例如,最小计算的 x 坐标为 0(例如,对于树中最左侧节点的左侧)
- 例如,最大计算的 x 坐标是 100(例如,对于树中最右侧节点的右侧)
使用最大计算的 x 和 y 坐标,我计算 figsize (因此,当树更大时,图形更大英寸)
DPI = 100
FACTOR = 10
x_pixels = FACTOR * max_x_tree_coord
y_pixels = FACTOR * max_y_tree_coord
ptr_fig = matplotlib.figure.Figure(figsize = (x_pixels / DPI, y_pixels / DPI),
dpi = DPI)
self.__ptr_axis = ptr_fig.gca()
在我用 matplotlib 绘制树之前,我“标准化”了我的树框架计算的坐标,以便 matplotlib 框架接收的 x 和 y 坐标值仅在 0 和 1 之间(因此例如变量代码下方的“left”和“bottom”只能具有0到1之间的值)
然后我绘制节点和连接,在下面的示例中我如何绘制节点的“框”
p = plt.Rectangle((left, bottom),
width,
height,
fill = fill,
edgecolor = edgecolor,
facecolor = facecolor,
linewidth = linewidth)
p.set_transform(self.__ptr_axis.transAxes)
p.set_clip_on(False)
self.__ptr_axis.add_patch(p)
最后我做
ptr_fig.set_canvas(matplotlib.backends.backend_agg.FigureCanvasAgg(ptr_fig))
ptr_fig.savefig(r"C:\path\to\my\tree_image.png", dpi = 100, format = "png")
当有人知道出了什么问题时,我会很高兴:-)
现在已经非常感谢您的回答
最好的问候丰索