python - 手动设置图例中点的颜色

标签 python numpy matplotlib colors legend

我正在制作一个如下所示的散点图:

enter image description here

(问题底部的 MWE)

如上图所示,matplotlib 自动将图例中点的颜色设置为蓝色。我需要将此点设置为颜色图中不存在的其他颜色(即:黑色),这样它们就不会与与所述颜色图关联的颜色产生混淆。

我环顾四周,但 matplotlib.legend模块似乎不接受 color 关键字。有没有办法做到这一点?


这是 MWE:

import matplotlib.pyplot as plt
import numpy as np

def rand_data():
    return np.random.uniform(low=0., high=1., size=(100,))

# Generate data.
x, y, x2, x3 = [rand_data() for i in range(4)]
# This data defines the markes and labels used.
x1 = np.random.random_integers(7, 9, size=(100,))

# Order all lists so smaller points are on top.
order = np.argsort(-np.array(x2))
# Order x and y.
x_o, y_o = np.take(x, order), np.take(y, order)
# Order list related to markers and labels.
z1 = np.take(x1, order)
# Order list related to sizes.
z2 = np.take(x2, order)
# Order list related to colors.
z3 = np.take(x3, order)

plt.figure()
cm = plt.cm.get_cmap('RdYlBu')

# Scatter plot where each value in z1 has a different marker and label
# assigned.
mrk = {7: ('o', '7'), 8: ('s', '8'), 9: ('D', '9')}
for key, value in mrk.items():

    s1 = (z1 == key)
    plt.scatter(x_o[s1], y_o[s1], marker=value[0], label=value[1],
        s=z2[s1] * 100., c=z3[s1], cmap=cm, lw=0.2)

# Plot colorbar
plt.colorbar()

# Plot legend.
plt.legend(loc="lower left", markerscale=0.7, scatterpoints=1, fontsize=10)

plt.show()

最佳答案

您可以获取图例句柄并单独更改它们的颜色:

ax = plt.gca()
leg = ax.get_legend()
leg.legendHandles[0].set_color('red')
leg.legendHandles[1].set_color('yellow')

关于python - 手动设置图例中点的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698850/

相关文章:

python - 如何展平 dtype 对象的 numpy 数组

python - 在 matplotlib 绘图上操作和动画图像

python - 异常值处理部分零值过多怎么办?

javascript - 如何使用 Skulpt 逐行评估 Python

python - pandas 获取多列上值的频率

python - 如何在 Python 中基于 2D 数组对 NumPy 3D 数组进行索引?

python - 如何在 python 中将黑白图像转换为 3 维数组?

matplotlib - iPython 笔记本 : How to prevent from outputting image on imshow()?

python - matplotlib 后端对渲染格式有什么限制?

python - 如何使用 ppk 公钥通过 Python Paramiko 进行 ssh 连接