Python 如何在matplotlib中创建自定义图例
我目前使用matplotlib以以下方式生成图例:Python 如何在matplotlib中创建自定义图例,python,matplotlib,Python,Matplotlib,我目前使用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.leg
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})
这在某种程度上是可行的。但我在我的传奇中复制了信息
我宁愿把传说分开。所以我有不同颜色的线,对应于时间t。一条法线作为我的解析解,一个圆点作为我的模拟结果
诸如此类
--(红线)t=25
--(蓝线)t=50
--(绿线)t=500
模拟
--解析解
现在有人知道我如何用matplotlib实现这一点了吗
您可以选择要在图例中显示的艺术家和标签,如下所示。您需要为图例中未实际绘制的图元创建自定义艺术家
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()
这可能是一个英语问题,但你所说的“艺术家”是什么意思?@Squig先生。模块
artist
,类artist
。这不再适用于为图例条目创建多个点。一种解决方案是通过括号将多个Line2D美工人员分组(Line2D((0)、(0))、Line2D((1)、(0),…)
,然后使用handler\u map={tuple:HandlerTuple(ndivide=None)}
。更多信息如下: