5

matplotlibを使用して、2つのAxesオブジェクト(つまり、2セットのxy軸)を含むフィギュアを作成しています。2つのポイントを接続したい---1つは一方の軸から選択し、もう一方はもう一方の軸から選択---矢印または線で接続します。

annotate()関数とConnectionPatchオブジェクトを使用してこれを実行しようとしましたが、どちらの方法でも、矢印の一部が軸の「フレーム」によって非表示になりました。ConnectionPatchオブジェクトで2つの軸の原点を接続しようとした添付の図を参照してください。

フィギュアの作成に使用したスクリプトも添付しています。

矢印を「前に出す」(または軸フレームを後ろに押す)方法はありますか?

2つの軸の原点を接続しようとしています。

#!/usr/bin/python
# 
# This script was written by Norio TAKEMOTO 2012-5-7


import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch

# creating a figure and axes.
fig=plt.figure(figsize=(10,5))

ax1=plt.axes([0.05,0.15,0.40,0.80])

plt.xticks([0])
plt.yticks([0])
plt.xlim((-1.23, 1.23))
plt.ylim((-2.34, 2.34))


ax2=plt.axes([0.60,0.15, 0.30, 0.30])

plt.xticks([0])
plt.yticks([0])
plt.xlim((-3.45, 3.45))
plt.ylim((-4.56, 4.56))


# trying to connect the point (0,0) in ax1 and the point (0,0) in ax2
# by an arrow, but some part is hidden. I can't find a solution. Let's
# ask stackoverflow.

#xy_A_ax1=(0,0)
#xy_B_ax2=(0,0)
#
#inv1 = ax1.transData.inverted()
#xy_B_display = ax2.transData.transform(xy_B_ax2)
#xy_B_ax1     = inv1.transform(xy_B_display)
#ax1.annotate('Wundaba', xy=(0, 0), xytext=xy_B_ax1,
#             xycoords='data',textcoords='data', 
#             arrowprops=dict(arrowstyle='->'))


con = ConnectionPatch(xyA=(0, 0), xyB=(0, 0), 
                      coordsA='data', coordsB='data', 
                      axesA=ax1, axesB=ax2,
                      arrowstyle='->', clip_on=False)
ax1.add_artist(con)

plt.savefig('fig1.eps')
plt.savefig('fig1.png')
4

2 に答える 2

3

簡単な方法の1つは、透過的な引数をに設定することsavefig()ですplt.savefig('fig1.png', transparent=1)

ここに画像の説明を入力してください

または、2番目のグラフで透明度を使用できます。

ax2.patch.set_facecolor('None')

21行目として。

于 2012-05-07T20:17:49.440 に答える
2

これは、軸にzオーダーを設定することで解決できます。

import matplotlib.patches
import matplotlib.pyplot as plt  # Vanilla matplotlib==2.2.2

figure, (ax1, ax2) = plt.subplots(1, 2)
ax1.set_zorder(1)
ax2.set_zorder(0)

patch = matplotlib.patches.ConnectionPatch(
    xyA=(0.0, 0.0),
    xyB=(0.0, 0.0),
    coordsA="data",
    coordsB="data",
    axesA=ax1,
    axesB=ax2,
    arrowstyle="->",
    clip_on=False,
)
ax1.add_artist(patch)

for ax in (ax1, ax2):
    ax.axis("scaled")
ax1.set_xlim(-0.25, 0.75)
ax1.set_ylim(-0.5, 0.5)
ax2.set_xlim(0.0, 1.0)
ax2.set_ylim(0.0, 1.0)
figure.savefig("example1.png")

ConnectionPatchのプロット

于 2018-07-06T20:35:54.543 に答える