具有相同标签的不同散点图标记
Different scatterplot markers with the same label
我有 'similar' 个问题要 Matplotlib, legend with multiple different markers with one label. I was able to achieve the following thanks to this question 。
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,但这似乎没有帮助。任何建议或评论都会有所帮助。
一个可能的解决方法是在第一列中创建一个带有空白标签的两列图例:
figlegend.legend((point1, point2, point3, point4), (' ', ' ', 'S', 'I'),
'center', scatterpoints = 1, ncol = 2)
这是我的解决方法 MWE。我实际上绘制了两个额外的 "plots"、point_g
和 point_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 字符。
我有 'similar' 个问题要 Matplotlib, legend with multiple different markers with one label. I was able to achieve the following thanks to this question
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,但这似乎没有帮助。任何建议或评论都会有所帮助。
一个可能的解决方法是在第一列中创建一个带有空白标签的两列图例:
figlegend.legend((point1, point2, point3, point4), (' ', ' ', 'S', 'I'),
'center', scatterpoints = 1, ncol = 2)
这是我的解决方法 MWE。我实际上绘制了两个额外的 "plots"、point_g
和 point_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 字符。