python legend用法 - 如何在matplotlib中製作自定義圖例




matplotlib教學 axis用法 (2)

您可以選擇要在圖例中顯示的藝術家和標籤,如下所示。 您需要為圖例中未實際繪製的元素創建自定義圖稿。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,10,31)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

#Plot analytic solution
ax.plot(x,1*x**2, color='r', label="t = 25")
ax.plot(x,2*x**2, color='b', label="t = 50")
ax.plot(x,3*x**2, color='g', label="t = 500")

#Plot simulation
ax.plot(x,1*x**2, color='r', linestyle='', marker='o')
ax.plot(x,2*x**2, color='b', linestyle='', marker='o')
ax.plot(x,3*x**2, color='g', linestyle='', marker='o')

#Get artists and labels for legend and chose which ones to display
handles, labels = ax.get_legend_handles_labels()
display = (0,1,2)

#Create custom artists
simArtist = plt.Line2D((0,1),(0,0), color='k', marker='o', linestyle='')
anyArtist = plt.Line2D((0,1),(0,0), color='k')

#Create legend from custom artist/label lists
ax.legend([handle for i,handle in enumerate(handles) if i in display]+[simArtist,anyArtist],
          [label for i,label in enumerate(labels) if i in display]+['Simulation', 'Analytic'])

plt.show()

我目前用matplotlib以這種方式生成我的傳奇:

if t==25:
    l1,l2 = ax2.plot(x320,vTemp320,'or',x320,vAnaTemp320,'-r')
elif t==50:
    l3,l4 = ax2.plot(x320,vTemp320,'ob',x320,vAnaTemp320,'-b')
else:
    l5,l6 = ax2.plot(x320,vTemp320,'og',x320,vAnaTemp320,'-g')
plt.legend((l1,l2,l3,l4,l5,l6), ('t=25 Simulation', 't=25 Analytical','t=50 Simulation', 't=50 Analytical','t=500 Simulation', 't=500 Analytical'),
   bbox_to_anchor=(-.25, 1), loc=2, borderaxespad=0.,prop={'size':12})

以某種方式工作看1 。 但我的傳說中有重複的信息。

我寧願分開這個傳說。 這樣我就有了與時間t對應的不同顏色的線條。 作為我的分析解決方案的正常線條是模擬結果的點。

這樣的事情

- (紅線)t = 25

- (藍線)t = 50

- (綠線)t = 500

o Simulaton

- 分析解決方案

現在有人用matplotlib來實現這一目標嗎?


作者請注意 :這是低效的。 但很有趣,因為單子很棒。 它不適合生產Python代碼。

>>> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]

這只是對第一個參數中傳遞的iterable元素進行求和,將第二個參數視為總和的初始值(如果沒有給出,則使用0代替,這種情況會給你一個錯誤)。

因為你是對嵌套列表求和,實際上得到[1,3]+[2,4]作為sum([[1,3],[2,4]],[]) ,它等於[1,3,2,4]

請注意,僅適用於列表列表。 對於列表列表,您需要另一種解決方案。





python matplotlib