2013-07-22 4 views
1

Avec matplotlib Je crée des parcelles souches, la définition des couleurs de tracé de la tige, et la création de la légende de quelque chose comme de l'intrigue ceci:matplotlib: changer les couleurs de légende de l'intrigue souches

import pyplot as plt 
... 

plots, legend_names = [], [] 

for x_var in x_vars: 
    plots.append(plt.stem(plt.stem(dataframe[y_var], dataframe[x_var]))) 

    markerline, stemlines, baseline = plots[x_var_index] 
    plt.setp(stemlines, linewidth=2, color=numpy_rand(3,1))  # set stems to random colors 
    plt.setp(markerline, 'markerfacecolor', 'b')    # make points blue 

    legend_names.append(x_var) 
... 

plt.legend([plot[0] for plot in plots], legend_names, loc='best') 

Le résultat ressemble à ceci:

Je suppose que le premier point de la légende est censé correspondre à la couleur du point (tel qu'il apparaît sur le graphique), alors que le second est censé correspondre à la couleur de la tige/ligne. Cependant, les couleurs de tige et de point finissent par correspondre à la couleur des points dans le graphique. Y'a t'il un moyen d'arranger cela? Merci.

Répondre

2

La légende par défaut est d'afficher deux marqueurs. Vous pouvez changer cela avec l'argument numpoints = 1. Votre commande de légende utilise les marqueurs et non les lignes comme entrées en utilisant plot[0]. Malheureusement, les tiges ne sont pas des artistes supportés pour la légende, donc vous devez utiliser un artiste proxy. Voici un exemple:

import pylab as plt 
from numpy import random 

plots, legend_names = [], [] 

x1 = [10,20,30] 
y1 = [10,20,30] 
# some fake data 
x2 = [15, 25, 35] 
y2 = [15, 25, 35] 
x_vars = [x1, x2] 
y_vars = [y1, y2] 
legend_names = ['a','b'] 

# create figure 
plt.figure() 
plt.hold(True) 

plots = [] 
proxies = [] 


for x_var, y_var in zip(x_vars, y_vars): 
    markerline, stemlines, baseline = plt.stem(x_var, y_var) 
    plots.append((markerline, stemlines, baseline)) 

    c = color = random.rand(3,1) 

    plt.setp(stemlines, linewidth=2, color=c)  # set stems to random colors 
    plt.setp(markerline, 'markerfacecolor', 'b') # make points blue 

    #plot proxy artist 
    h, = plt.plot(1,1,color=c) 
    proxies.append(h) 
# hide proxies  
plt.legend(proxies, legend_names, loc='best', numpoints=1) 
for h in proxies: 
    h.set_visible(False) 
plt.show() 

enter image description here

+0

Impressionnant. Je vous remercie! – Lamps1829

Questions connexes