Matplotlib图传奇显示标记两次

时间:2015-07-02 19:20:45

标签: python pandas matplotlib plot

我的绘图中的图例在图例中显示两次标记图标

Code output

产生此图的代码如下所示

import pandas as pd
import random
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

N = 15

colors = cm.rainbow(np.linspace(0, 1, N))

df = []

for i in range(N):
    s = 'NAME %d' % i
    df.append(dict(x=random.random(), y=random.random(), name=s))

df = pd.DataFrame(df)
c = 0
labels = []

fig, ax = plt.subplots(figsize=(12,12))
for name, group in df.groupby('name'):

    x = group['x'].values[0]
    y = group['y'].values[0]

    color = colors[c]
    c += 1

    ax.plot(x, y, color=color, marker='o', linestyle='', label=name)

    labels.append(name)

handels, _ = ax.get_legend_handles_labels()
ax.legend(handels, labels)

为什么会这样?

我的实际df每个名称都有多个条目,这就是我groupby的原因。这里有什么我想念的吗?

1 个答案:

答案 0 :(得分:4)

您可以直接set plt.legend(loc=...,numpoints =1)或创建style sheet并设置legend.numpoints : 1

如果您使用的是Linux系统:将样式表放在~/.config/matplotlib/stylelib/中,您可以将它们与plt.style.use([your_style_sheet])一起使用。此外,您可以例如为颜色等制作一张纸,为尺寸制作一张:plt.style.use([my_colors,half_column_latex])