ツリーの視覚化/描画用に独自に記述した「ツリー フレームワーク」座標を使用して計算します (したがって、ノードと接続の座標を計算します)。私は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 に含まれる画像):
次のいくつかの背景情報は、原則でどのように機能するかです (もちろん、実際の詳細ははるかに複雑です ==> 必要なものだけを説明し、物事を単純化しますが、原則として、もちろん私が書いていることはすべてです)真実)
私のツリーフレームワークを使用して、ビジュアルツリーのすべてのノードと接続の座標を計算します
- たとえば、計算された 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 の間のみになるようにします (したがって、変数コード ダウンの「左」と「下」は、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")
何がうまくいかないのか誰かが考えてくれたとき、私はとても幸せです:-)
すでに多くの回答に感謝します
よろしくフォンソ