matplotlib 为具有不同颜色的项目添加纯色图例键

carvr3hs  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(186)

我发现matplotlib是最令人困惑的库之一:(
我正在使用一个轴的散射函数来绘制一些点,每个点都有自己的权重与它相关联,控制不透明度...

colors = [(*c[:3], w.item() / 1) for w in weight]
ax.scatter(gen, samples, c=colors, s=10, marker="*", label="$\\tilde{x}$", zorder=-100)
ax.legend

问题是图例中的颜色似乎是colors数组中的随机颜色。有时它是半透明的,因为散点中的一些颜色几乎是半透明的。我希望图例中的颜色是实心的,同时保持散点图中的可变颜色。
我该怎么做?

olhwl3o2

olhwl3o21#

只更改图例手柄的alpha值比预期的要困难(item.set_alpha(1)明显会导致一些几乎不可见的颜色出现问题)。但您可以设置手柄颜色,使图例具有统一的外观:

from matplotlib import pyplot as plt

#fake data generation
import numpy as np
n = 10
np.random.seed(1234)
gen = np.random.randint(1, 10, n)
samples = np.random.randint(10, 50, n)
colors = np.random.rand(n, 4)
#reduce the alpha values for demonstration purposes
colors[:, 3] = colors[:, 3]/3

fig, ax = plt.subplots(figsize=(10,8))

ax.scatter(gen, samples, c=colors, s=70, marker="o", label="$\\tilde{y}$", zorder=-100)
ax.scatter(samples, gen, c=colors, s=50, marker="x", label="$\\tilde{x}$", zorder=-100)

l = ax.legend()

for item in l.legendHandles:
    item.set_color("black")

plt.show()

样本输出:

相关问题