问题--在matplotlib的散点图中如何给不同种类颜色的点加标签?


需求

在进行代码编写的时候,遇到使用散点图的问题,最后呈现出的结果只是不同颜色的点,但是无法一眼看去让人清楚这些点表示的不同含义。因此,通过给散点图中不同颜色的点加标签来表示这些点的含义(我实际的应用是用在机器学习中训练集和测试集的数据中).

  • 原始效果
    在这里插入图片描述

  • 最终效果
    在这里插入图片描述

通过该图像中左上角的标签含义可以明白蓝色的散点表示的是训练集的数据红色的点表示的是测试集的数据


一、scatter图像显示散点含义

  • 一元线性回归Python底层实现

  • 引入包

import numpy as np
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
%matplotlib inline

  • 构造、计算、测试
# 构造训练的数据集
x_train = [4,8,5,10,12]
y_train = [20,50,30,70,60]

# 画图
# def draw(x_train,y_train):
#    plt.scatter(x_train,y_train,color='b')

# 定义函数求出斜率w和截距b
# 方法:使用最小二乘法斜率和截距求导并使得导数值等于0求解出斜率和截距
def fit(x_train,y_train):
    size = len(x_train)
    numerator = 0 # 初始化分子
    denominator = 0 # 初始化分母
    
    for i in range(size):
        numerator += (x_train[i]-np.mean(x_train)) * (y_train[i]-np.mean(y_train))
        denominator += (x_train[i]-np.mean(x_train)) ** 2
    
    w = numerator / denominator
    b = np.mean(y_train) - w * np.mean(x_train) # 用求出的斜率计算截距
    
    return w,b

# 预测函数
def predict(x,w,b):
    y = w * x + b
    return y

# 根据计算出的w,b进行画图
def fit_line(w,b):
    typ1 = plt.scatter(x_train,y_train,color='b') # 画出散点图
    # 测试集使用np.linspace()生成的数据集进行测试
    x = np.linspace(4,15,9)
    y = w * x + b
    
    print('x_test:',x)
    print('y_test:',y)
    
    typ2 = plt.scatter(x,y,color='red') # 测试集的散点图
    plt.plot(x,y)
    
    plt.legend((typ1,typ2),('train','test')) # ⭐⭐⭐
    plt.show()
  • 调用显示
w ,b = fit(x_train,y_train) # 根据训练集数据计算出斜率和截距
print('斜率:',w,'截距:',b)
fit_line(w,b) # 绘制出测试集数据

在这里插入图片描述

左上角显示的原因在于:plt.legend((typ1,typ2),('train','test'))


二、附录

  1. 【matplotlib】scatter()散点图的详细参数
  2. 数字的可视化:python画图之散点图sactter函数详解 :该篇内容是使用subplot进行图像绘出的,散点的含义是直接显示在图像中的
  3. 用plt.scatter()画带label的散点图(无需循环,直接根据标签生成)
  4. plt.scatter分类数据legend添加图例
  5. Matplotlib散点图加legend⭐⭐

该图片来源于2中的博客文章

  • 结论

综上看到的几篇文章,其中从5中所给出的文章中可以看出当多次使用scatter画散点图时,使用legend图例给相应颜色种类的点增加标签


Guess you like

Origin blog.csdn.net/HG0724/article/details/121097188