2013-07-22 3 views
1

С Matplotlib я создаю стержневые участки, установки стволовых сюжетные цветов и создавая легенду что-то сюжет как это:Matplotlib: изменение стволового участок легенда цвета

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') 

Результат выглядит следующим образом:

enter image description here

Я предполагаю, что первая точка в легенде должна соответствовать цвету точки (как показано на графике), а вторая должна соответствовать цвету стебля/линии. Тем не менее, как исходные, так и точечные цвета в конечном итоге соответствуют цвету точек на графике. Есть ли способ исправить это? Благодарю.

ответ

2

Значением по умолчанию является отображение двух маркеров. Вы можете изменить это с помощью аргумента numpoints = 1. Ваша команда legend использует маркеры, а не строки в качестве входных данных, используя plot[0]. К сожалению, стебли не поддерживаются художниками для легенды, поэтому вам нужно использовать прокси-исполнителя. Вот пример:

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

Высокий. Спасибо! – Lamps1829

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