2015-07-02 3 views
0

Легенда в моем участке показывает значок маркера дважды в легендеMatplotlib сюжет легенды показывает маркеры дважды

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) 

Почему это происходит?

My actual df имеет несколько записей для каждого имени, поэтому я делаю groupby. Здесь что-то не хватает?

+3

По умолчанию больше смысла, если у вас есть непустой стиль линии. – tacaswell

ответ

4

вы можете setplt.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])

+0

Удивительная благодарность, почему у Earthy есть 'numpoints = 1' НЕ по умолчанию? – sedavidw

Смежные вопросы