2

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

结果如下所示:

在此处输入图像描述

我猜图例中的第一个点应该对应于点颜色(如图所示),而第二个点应该对应于茎/线颜色。但是,主干和点颜色最终都对应于图中点的颜色。有没有办法来解决这个问题?谢谢。

4

1 回答 1

3

图例的默认设置是显示两个标记。你可以用参数改变它numpoints = 1。您的图例命令正在使用标记,而不是使用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()

在此处输入图像描述

于 2013-07-22T16:40:22.060 回答