我正面臨着在劇情之外顯示兩個傳說的問題。 顯示多個傳說裏面情節很簡單 - 它在matplotlib文檔中的例子中描述。 即使在劇情之外顯示一個傳說也相當容易,因爲我在這裏找到了stackoverflow(例如here)。 但我找不到工作的例子來顯示劇情之外的兩個傳說。 使用一個圖例的方法在這種情況下不起作用。matplotlib兩個傳說出來的陰謀
這裏是一個例子。 首先基本代碼:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.lines import Line2D
from matplotlib.font_manager import FontProperties
fig1 = plt.figure(figsize=(17,5))
fontP = FontProperties()
fontP.set_size('small')
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.grid()
# stuff for legend
rec1 = patches.Rectangle(
(0.9, 0.25), # (x,y)
0.1, # width
0.1, # height
label='rectangle',
**{
'color': 'blue'
}
)
ax1.add_patch(rec1)
leg = plt.legend(handles=[rec1], bbox_to_anchor=(0.7, -0.1))
fig1.savefig('sample1.png', dpi=90, bbox_inches='tight')
但現在我想在曲線的右側畫出另一個傳奇。 下面是代碼:
...
ax1.add_patch(rec1)
l1 = plt.legend(prop=fontP, handles=[rec1], loc='center left',
box to_anchor=(1.0, 0.5))
plt.gca().add_artist(l1)
...
而結果:
正如你所看到的,第二個傳說被截斷。 我的結論是matplotlib忽略與
plt.gca().add_artist(obj)
我怎樣才能解決這個添加對象的大小和位置?
到目前爲止,我發現了一個解決方案,但它很討厭:
創建三個傳說,兩人對視additiontal(由add_artist加)和一個正常的傳說。 至於matplotlib尊重位置和法線傳說的大小,將其移動到右下角和隱藏與代碼它:
leg.get_frame().set_alpha(0)
下面是結果(不設置例如目的阿爾法):
它的行爲完全是我想要的,但正如你知道它的討厭。 下面是最終的代碼:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.lines import Line2D
from matplotlib.font_manager import FontProperties
fig1 = plt.figure(figsize=(17,5))
fontP = FontProperties()
fontP.set_size('small')
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.grid()
# stuff for additional legends
rec1 = patches.Rectangle(
(0.9, 0.25), # (x,y)
0.1, # width
0.1, # height
label='rectangle',
**{
'color': 'blue'
}
)
ax1.add_patch(rec1)
# example additional legends
l1 = plt.legend(prop=fontP, handles=[rec1], loc='center left',
bbox_to_anchor=(1.0, 0.5))
l2 = plt.legend(prop=fontP, handles=[rec1], loc=3, bbox_to_anchor=(0.4,
-0.2))
# add legends
plt.gca().add_artist(l1)
plt.gca().add_artist(l2)
# add third legend
leg = plt.legend(handles=[], bbox_to_anchor=(1.3, -0.3))
leg.get_frame().set_alpha(0) # hide legend
fig1.savefig('sample3.png', dpi=90, bbox_inches='tight')
這樣做幾乎完美。我只需要對傳說位置和情節規模進行一些調整,但它完全符合我的需求。謝謝! –