使用.plot函数来删除图例标记上的线条。

67
我有一个使用以下代码生成的matplotlib图表:
import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.plot(i+1, i+1, color=color,
            marker=mark,
            markerfacecolor='None',
            markeredgecolor=color,
            label=i)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend()

这是生成的图形: matplotlib生成的图形 我不喜欢图例中的标记线。我该如何去掉它们?
4个回答

107
您可以在绘图命令中指定linestyle="None"作为关键字参数:
import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.plot(i+1, i+1, color=color,
            marker=mark,
            markerfacecolor='None',
            markeredgecolor=color,
            linestyle = 'None',
            label=`i`)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend(numpoints=1)
pyplot.show()

在此输入图片描述

由于您只绘制单个数据点,因此除了在图例中之外,您无法看到线条属性。


有趣的是,这仍然在图例中“绘制”(或分配空间)线条,请查看我们答案之间图例中的间距。 - Hooked
2
就我个人而言,我认为符号周围留有一些空间看起来很好,尽管如果我要进行优化,我会放入比上面显示的少一点。填充还可以通过关键字参数进行微调,例如:handletextpad=-.5, columnspacing=0, borderpad=-.5, borderaxespad=0等,包括可以用作关键字参数的handlelength - tom10
7
哎呀,不是 None 而是 "None" - bonobo
或者简单地说,ls=' ' - Stardust

9

1
这是设置全局参数的好例子。对于非全局设置,我更喜欢@tom10的答案。 - jlconlin

8

一旦数据已经绘制,要简单地删除这些线条:

handles, labels = ax.get_legend_handles_labels()
for h in handles: h.set_linestyle("")
ax.legend(handles, labels)

6
这里应该使用散点图。
import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.scatter(i+1, i+1, color=color,
            marker=mark,
            facecolors='none',
            label=i)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend(scatterpoints=1)

pyplot.show()

1
这是我的第一次回复,但我认为示例可能过于具体了 - 如果OP想要一个具有多个点的真实情节呢? - Hooked
啊,是的,可能是这种情况。我只是假设他不知道散点图函数。如果他真的想要一个真正的有多个点的图,应该选择这里其他答案之一。 - M4rtini
1
我知道scatter图。但我需要更通用的东西。我在这里只是举了一个例子使用plot。我的当前实际应用程序实际上使用errorbar; scatter不允许我绘制误差条。 - jlconlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接