Python 如何更改图例标记的颜色?

Python 如何更改图例标记的颜色?,python,matplotlib,Python,Matplotlib,我正在尝试将图例项的颜色更改为黑色。过去我用scatter而不是plot做过类似的事情,但是因为我也想要fillstyle,所以我需要使用plot import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib import container def ColorExtractor(cmap, colist): cmap = matplotlib.cm.get_cmap(cmap)

我正在尝试将图例项的颜色更改为黑色。过去我用
scatter
而不是
plot
做过类似的事情,但是因为我也想要
fillstyle
,所以我需要使用
plot

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import container

def ColorExtractor(cmap, colist):
    cmap = matplotlib.cm.get_cmap(cmap)
    rbga = cmap(colist)
    return rbga

colors = ColorExtractor('Blues', [3/3, 3/3, 2/3, 1/3])

fig, ax = plt.subplots()

x_data = np.array([0.975, 0.75, 0.525])

y_min  = np.array([3, 3, 2])
y_max  = np.array([4, 4, 3])

for xs, ys, cols, labs, flstl in zip([x_data, x_data], [y_min, y_max], [colors, colors], ['$x_{min}$', '$x_{max}$'], ['bottom', 'top']):
    ax.plot(xs, ys, 'k:')
    for x, y, col in zip(xs, ys, cols):
        ax.plot(x, y, color=col, marker='<', label=labs, fillstyle=flstl, markeredgecolor='k', linestyle='none', markersize=10)

ax.set_xlim(0.5, 1)
ax.set_ylim(1, 5)

ax.set_xlabel('$x$', fontsize=15)
ax.set_ylabel('$y$', fontsize=15)

handles, labels = ax.get_legend_handles_labels()
handles = [i[0] if isinstance(i, container.ErrorbarContainer) else i for i in handles]

by_label = dict(zip(labels, handles))

ax.legend(by_label.values(), by_label.keys(), loc=9, ncol=2, frameon=False)

leg = ax.get_legend()

for i in leg.legendHandles:
    i.set_color('k')
    i.set_markeredgecolor('k')
    #i.set_edgecolor('k')

plt.show()
将numpy导入为np
导入matplotlib
将matplotlib.pyplot作为plt导入
从matplotlib导入容器
def颜色提取器(cmap,colist):
cmap=matplotlib.cm.get\u cmap(cmap)
rbga=cmap(共线性)
返回rbga
颜色=颜色提取器('蓝色',[3/3,3/3,2/3,1/3])
图,ax=plt.子批次()
x_data=np.数组([0.975,0.75,0.525])
y_min=np.数组([3,3,2])
y_max=np.数组([4,4,3])
对于zip中的xs、ys、cols、labs、flstl([x_数据,x_数据],[y_最小值,y_最大值],[colors,colors],“$x_{min}$',“$x_{max}$'”,['bottom',top']):
ax.plot(xs,ys,'k:')
对于zip中的x、y、col(xs、ys、cols):

ax.plot(x,y,color=col,marker='如果您过早地更改图例句柄,那么绘图中的颜色也将更改。因此,您需要制作句柄的副本,然后为这些副本上色。请注意,
set_markerface color()
更改标记的第一种颜色(
blue
在示例代码中).And
set\u markerfacecoloralt()
将更改第二种颜色(白色)。因此,您可能希望
set\u markerfacecolor('black')
),而不更改另一种颜色

以下是一个例子:

从副本导入副本
句柄,标签=ax.get\u legend\u handles\u labels()
handles=[copy(i[0]),如果isinstance(i,container.ErrorbarContainer)或者copy(i)for i in handles]
对于句柄中的i:
i、 set_markeredgecolor('黑色')
i、 设置“markerfacecolor”(“深红色”)#使用“黑色”将该部分变为黑色
i、 设置_markerfacecoloralt('gold')#如果第二种颜色已经可以,请将此行保留
by_label=dict(拉链(标签、把手))
ax.legend(by_label.values()、by_label.keys()、loc=9、ncol=2、frameon=False)

也许是
set\u markerdgecolor
而不是
set\u edgecolor
?谢谢你,@Galunid。我按照你说的做了更改,没有产生任何错误。但是,主要问题是我想将标记内部的颜色从蓝色改为黑色。然后
set\u markerfacecolor
应该做你需要的小动作
set\u markerfacecolor
alt()
为第二种颜色。.请参阅以获取两种颜色的标记的解释。再次感谢@Galunid。我担心在使用
设置标记面颜色时不会发生任何事情。
--它仍然是蓝色而不是黑色。再次感谢您,@JohanC!我按照您的指示操作,效果非常好。:)