2015-05-11 97 views
3

我与Matplotlib, legend with multiple different markers with one label有'相似'问题。由于这个问题Combine two Pyplot patches for legend,我能够实现以下目标。具有相同标签的不同散点图标记

fig = pylab.figure() 
figlegend = pylab.figure(figsize=(3,2)) 
ax = fig.add_subplot(111) 
point1 = ax.scatter(range(3), range(1,4), 250, marker=ur'$\u2640$', label = 'S', edgecolor = 'green') 
point2 = ax.scatter(range(3), range(2,5), 250, marker=ur'$\u2640$', label = 'I', edgecolor = 'red') 
point3 = ax.scatter(range(1,4), range(3), 250, marker=ur'$\u2642$', label = 'S', edgecolor = 'green') 
point4 = ax.scatter(range(2,5), range(3), 250, marker=ur'$\u2642$', label = 'I', edgecolor = 'red') 
figlegend.legend(((point1, point3), (point2, point4)), ('S','I'), 'center', scatterpoints = 1, handlelength = 1) 
figlegend.show() 
pylab.show() 

但是,我的两个(金星和火星)标记在图例中重叠。我尝试玩handlelength,但这似乎没有帮助。任何建议或意见都会有所帮助。

回答

2

这里是我的解决方法MWE。我实际上绘制了两个额外的“情节”,point_gpoint_r,它们有我们将使用的图例句柄。然后我用白色的方形标记覆盖它们。根据需要画出剩余的地块。

import matplotlib.pyplot as plt 
plt.rc('text', usetex=True) 
plt.rc('text', **{'latex.preamble': '\\usepackage{wasysym}'}) 
plt.rc('lines', **{'markersize':20}) 

fig = plt.figure() 

point_g, = plt.plot((0,), (0,), ls='none', marker='$\\male\\female$', mec='g') 
point_r, = plt.plot((0,), (0,), ls='none', marker='$\\male\\female$', mec='r') 
plt.plot((0,), (0,), marker='s', mec='w', mfc='w') 

plt.plot(range(3), range(1,4), ls='none', marker='$\\male$', mec='g') 
plt.plot(range(3), range(2,5), ls='none', marker='$\\male$', mec='r') 
plt.plot(range(1,4), range(3), ls='none', marker='$\\female$', mec='g') 
plt.plot(range(2,5), range(3), ls='none', marker='$\\female$', mec='r') 

plt.axis([-0.1, 4.1, -0.1, 4.1]) 
plt.legend((point_g, point_r), ('Green', 'Red'), markerscale=1.6, numpoints=1, 
      borderpad=0.8, handlelength=3, labelspacing=1) 

plt.show() 

注:如果您使用unicode符号你不需要LaTeX的序言。我无法让他们在我的系统(Linux)上工作,所以我使用了LaTeX符号。这种方法适用于所有符号,只需删除plt.rc命令并将\\male\\female更改为unicode字符。

3

可能的解决方法是创建一个两列的传说与第一列空白标签:

figlegend.legend((point1, point2, point3, point4), (' ', ' ', 'S', 'I'), 
       'center', scatterpoints = 1, ncol = 2) 

legend with two columns

+0

您还可以调整列间距以将它们靠得更近。 – Blink

相关问题