【matplotlib】python让scatter能够使不同类别的点有不同的颜色、大小和形状

本文详细介绍如何使用Python的matplotlib库中的scatter函数绘制带有不同颜色、大小和形状的数据点,适用于展示不同类别的数据分布。文章提供两种方法,一种直接使用scatter函数控制点的颜色和大小,另一种通过自定义mscatter函数实现点的形状多样化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尊重原创python让scatter能够使不同类别的点有不同的颜色、大小和形状

python自带的scatter函数参数中颜色大小可以输入列表进行控制,即可以让不同的点有不同的颜色和大小,但是只能是同一种形状。例如例一:

import numpy as np
import matplotlib.pyplot as plt


def plotMatrixPoint(Mat, Label):
    """
    :param Mat: 二维点坐标矩阵
    :param Label: 点的类别标签
    :return:
    """
    x = Mat[:, 0]
    y = Mat[:, 1]
    map_size = {-1: 50, 1: 100}
    size = list(map(lambda x: map_size[x], Label))
    map_color = {-1: 'r', 1: 'g'}
    color = list(map(lambda x: map_color[x], Label))
    map_marker = {-1: 'o', 1: 'v'}
    markers = list(map(lambda x: map_marker[x], Label))
    # 下面一行代码会出错,因为marker参数不支持列表
    #  plt.scatter(np.array(x), np.array(y), s=size, c=color, marker=markers)
    # 下面一行代码为修正过的代码
    plt.scatter(np.array(x), np.array(y), s=size, c=color, marker='o')  # scatter函数只支持array类型数据
    plt.show()


def loadSimpData():
    datMat = np.matrix([[1., 2.1], [1.5, 1.6], [1.3, 1.], [1., 1.], [2., 1.]])
    classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]
    plotMatrixPoint(datMat, classLabels)
    return datMat, classLabels


if __name__ == "__main__":
    loadSimpData()

显示图形:
在这里插入图片描述

下面的代码的mscatter函数 颜色、大小、形状参数都能接受列表,如例二代码:

import numpy as np
import matplotlib.pyplot as plt


def mscatter(x, y, ax=None, m=None, **kw):
    import matplotlib.markers as mmarkers
    if not ax: ax = plt.gca()
    sc = ax.scatter(x, y, **kw)
    if (m is not None) and (len(m) == len(x)):
        paths = []
        for marker in m:
            if isinstance(marker, mmarkers.MarkerStyle):
                marker_obj = marker
            else:
                marker_obj = mmarkers.MarkerStyle(marker)
            path = marker_obj.get_path().transformed(
                marker_obj.get_transform())
            paths.append(path)
        sc.set_paths(paths)
    return sc



def plotMatrixPoint(Mat, Label):
    """
    输入二维点矩阵和标签,能够改变不同形状
    :param Mat:
    :param Label:
    :return:
    """
    x = Mat[:, 0]
    y = Mat[:, 1]
    map_size = {-1: 50, 1: 100}
    size = list(map(lambda x: map_size[x], Label))
    map_color = {-1: 'r', 1: 'g'}
    color = list(map(lambda x: map_color[x], Label))
    map_marker = {-1: 'o', 1: 's'}
    markers = list(map(lambda x: map_marker[x], Label))
    mscatter(np.array(x), np.array(y), s=size, c=color, m=markers)  # scatter函数只支持array类型数据
    plt.show()


def loadSimpData():
    datMat = np.matrix([[1., 2.1], [1.5, 1.6], [1.3, 1.], [1., 1.], [2., 1.]])
    classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]
    plotMatrixPoint(datMat, classLabels)
    return datMat, classLabels


if __name__ == "__main__":
    loadSimpData()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值