为什么matplotlib中的散点图图例无法正确渲染

w51jfk4q  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(167)

我是Python新手,更习惯于用R编程和使用ggplot进行可视化。我试图在matplotlib中完成一个可视化,但似乎无法理解绘图图例。以下是代码。X和Y是数值类型,而列z是字符串。
我希望图表中的图例0为红色,1为黑色,但只显示图例标题。

plt_data = pd.DataFrame(plt_data)
plt.figure()
fig, ax = plt.subplots()
labs = ["1", "0"]
colors = {'1':'black', '0':'red'}
scatter = ax.scatter(plt_data['x'], plt_data['y'], c = plt_data['z'].map(colors))
legend1 = ax.legend(*scatter.legend_elements(), loc="upper left", title="z")
ax.add_artist(legend1)
plt.show()

这是一幅

任何帮助都将不胜感激,因为这个问题似乎不应该太难,但我正在努力寻找一个解决方案,工程

3npbholx

3npbholx1#

创建自定义颜色Map表,在本例中为颜色列表:

import matplotlib.pyplot as plt
import matplotlib as mpl

c_RB = mpl.colors.ListedColormap(["red", "black"])

现在,对于散点着色,将“c”看作是对每个点进行分类的数据(也就是“z”列),而“cmap”将决定每个类别的颜色。
因此:

x = [1, 2]
y = [2, 3]
z = [1, 0]

fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c = z, cmap = c_RB )

legend1 = ax.legend(*scatter.legend_elements(), loc="upper left", title="z")

plt.show()

这给出:

您不需要调用add_artist(),除非您实际上打算添加多个图例。

相关问题