sedavidw
sedavidw

Reputation: 11691

Matplotlib plot legend shows markers twice

The legend in my plot shows the marker icon twice in the legend

Code output

The code that produced this plot is given below

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)

Why is this happening?

My actual df has multiple entries for each name so that's why I do a groupby. Is there something I'm missing here?

Upvotes: 0

Views: 1117

Answers (1)

Moritz
Moritz

Reputation: 5408

you can either set plt.legend(loc=...,numpoints =1) directly or create a style sheet and set legend.numpoints : 1

If you use a linux system: place your stylesheets in ~/.config/matplotlib/stylelib/ you can use them with plt.style.use([your_style_sheet]). Additionally, you can e.g. make one sheet for the colors etc. and one for the size: plt.style.use([my_colors,half_column_latex])

Upvotes: 4

Related Questions