繁体   English   中英

如何在 matplotlib 上的散点图中添加图例(点根据 0 和 1 的数组进行颜色编码)?

[英]How do I add a legend to a scatter plot on matplotlib (the points are colour coded according to an array of 0s and 1s)?

我正在使用 Python 3 Jupyter Notebook。 我有一个 3 列表(价格、大小和视图)。 我创建了一个“价格”与“大小”的散点图,但我根据仅包含 0 和 1 的“视图”列对点进行了颜色编码。 现在我想添加一个图例,显示红点代表“无视图”,蓝点代表“视图”。 这是我尝试过的:

plt.scatter(data1["size"], data1["price"], c = data1["view"], cmap = "bwr_r")
plt.xlabel("Size", fontsize = 25, c = "green")
plt.ylabel("Price", fontsize = 25, c = "green")
plt.legend(["No view", "View"], bbox_to_anchor= (1.05, 0.5), loc= "lower left")
plt.show()

运行上面的代码后,一切正常,除了图例只显示红点的“无视图”,蓝点的“视图”不出现。

要执行您需要的操作,您需要将视图 - 0 或 1 分配给一种颜色,以便映射正确的颜色。 这可以使用地图来完成。 图例的句柄需要添加自定义文本,以便分配蓝色和红色并使用正确的标签显示。 我使用随机数作为数据来绘制所需的图表,并保留尽可能多的代码。

代码

import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

size = []
price = []
view = []

for i in range(0,100):
    size.append(round(random.random(),3))
    price.append(round(random.random(),3))
    view.append(int(random.random()*10 % 2))
df = pd.DataFrame({'size':size, 'price':price, 'view':view})
colors = {0:'red', 1:'blue'}
plt.scatter(x=df['size'], y=df['price'], c=df['view'].map(colors))
plt.xlabel("Size", fontsize = 25, c = "green")
plt.ylabel("Price", fontsize = 25, c = "green")
markersize=8) for k, v in colors.items()]
custom = [Line2D([], [], marker='.', color='red', linestyle='None'),
          Line2D([], [], marker='.', color='blue', linestyle='None')]

plt.legend(handles = custom, labels=['No View', 'View'], bbox_to_anchor= (1.05, 0.5), loc= "lower left")
plt.show()

输出图

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM