4

Matplotlibsankey-toolboxを使用すると、sankey-diagramsを自動的にプロットできます。sankey-objectの位置は、前のオブジェクトの位置に基づいて自動的に計算され、手動で指定することはできません。サンキーダイアグラムが初期化されると、最初のサンキーオブジェクトの位置が軸の入力で割り当てられます。((0,0)ポイントはこのオブジェクトの中心点になります)

そして、これが状況です。与えられたyオフセットで2つのサンキーダイアグラムを描きたいので、2つのダイアグラムのいくつかのポートを接続する必要があります。したがって、同じサブプロットにyオフセットを持つ2つの座標系が必要です。' add_axes 'メソッドを試しましたが、このメソッドを使用すると、新しいサブプロットが作成され、グラフィックのスケーリングの問題が発生します。

これが問題です。サブプロットを作成せずに、特定のyオフセットを使用して新しい座標系を作成することは可能ですか?

4

2 に答える 2

2

完全な答えではありませんが、解決策を見つけるのに役立つ場合があり ます。キーワード引数sankey.add()をサポートします。transformフィギュアに応じて、新しいtransformインスタンスを作成し、フィギュアのシフトされた部分に使用します。

offset = transforms.ScaledTranslation(0.0, 0.5, fig.dpi_scale_trans)
new_transform = ax.transData + offset
sankey.add(flows=[-0.25, 0.15, 0.1], fc='#37c959', label='two',
           orientations=[-1, -1, -1], prior=0, connect=(0, 0),
           transform = new_transform)

新しい変換を作成するために、ヘルパー関数matplotlib.transforms.offset_copy()も役立つ場合があります。

new_transform = offset_copy(ax.transData, fig=fig,
                            x = 0.05, y=0.10, units='inches')
于 2012-12-18T09:12:45.837 に答える
0

問題が解決しました。Affine2DBaseクラスのサブクラスを作成して、 ax.transDataオブジェクトなどの特定の変換オブジェクトに基づいて座標変換を実行しました。そしてそれは私のプログラムのためにうまくいきます...それが他の人々のために役立つことを願っています。

class coordinateTranslation(Affine2DBase):
    def __init__(self, dx, dy, transform, **kwargs):
        Affine2DBase.__init__(self,**kwargs)
        self._dx = dx
        self._dy = dy
        self._transform = transform
        self._mtx = None
        self._inverted = None
    def __repr__(self):
        return "coordinateTranslation(%r, %r)" % (self._dx, self._dy)
    def get_matrix(self):
        dx, dy = self._transform.transform((self._dx, self._dy))
        dx_zero, dy_zero = self._transform.transform((0, 0))
        dx -= dx_zero; dy -= dy_zero
        self._mtx = np.array([[1.0, 0.0, dx],
                              [0.0, 1.0, dy],
                              [0.0, 0.0, 1.0]], np.float_)
        self._inverted = None
        return self._mtx
    get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
于 2013-01-02T15:52:35.537 に答える