【Python】matplotlib画散点图,并根据目标列的类别来设置颜色区间(含源代码及参数解释)

news2024/12/24 9:05:38

最近在进行绘图时,遇到了matplotlib画散点图,并根据目标列的类别来设置颜色区间的问题,但是实现的过程较为艰辛。

文章目录

  • 一、数据准备
  • 二、第一次尝试(失败及其原因)
    • 2.1 失败
    • 2.2 原因
  • 三、第二次尝试(成功)
  • 四、总结—plt.scatter()函数的参数
    • 4.1 全部常见的参数
    • 4.2 其中的c参数
      • 4.2.1 使用单一颜色值
      • 4.2.2 使用颜色序列
      • 4.2.3 使用数值映射

一、数据准备

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_excel('./ch2-iris.xlsx')
data.head()

在这里插入图片描述
我们希望画出sepal length和sepal width之间的散点图,并根据class列的类别来分类。

二、第一次尝试(失败及其原因)

2.1 失败

# 提取 sepal length 和 sepal width 数据
x_axis = data[' sepal length']
y_axis = data['sepal width']

# 提取 class 列的类别作为颜色
colors = data['class']

# 绘制散点图
plt.scatter(x_axis, y_axis, c=colors)

# 设置图标题和坐标轴标签
plt.title('Sepal Length vs Sepal Width')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')

# 显示图像
plt.show()

此时代码报错:

ValueError                                Traceback (most recent call last)
File d:\Anaconda\envs\PyTorch\lib\site-packages\matplotlib\axes\_axes.py:4375, in Axes._parse_scatter_color_args(c, edgecolors, kwargs, xsize, get_next_color_func)
   4374 try:  # Is 'c' acceptable as PathCollection facecolors?
-> 4375     colors = mcolors.to_rgba_array(c)
   4376 except (TypeError, ValueError) as err:

File d:\Anaconda\envs\PyTorch\lib\site-packages\matplotlib\colors.py:487, in to_rgba_array(c, alpha)
    486 else:
--> 487     rgba = np.array([to_rgba(cc) for cc in c])
    489 if alpha is not None:

File d:\Anaconda\envs\PyTorch\lib\site-packages\matplotlib\colors.py:487, in (.0)
    486 else:
--> 487     rgba = np.array([to_rgba(cc) for cc in c])
    489 if alpha is not None:

File d:\Anaconda\envs\PyTorch\lib\site-packages\matplotlib\colors.py:299, in to_rgba(c, alpha)
    298 if rgba is None:  # Suppress exception chaining of cache lookup failure.
--> 299     rgba = _to_rgba_no_colorcycle(c, alpha)
    300     try:

File d:\Anaconda\envs\PyTorch\lib\site-packages\matplotlib\colors.py:374, in _to_rgba_no_colorcycle(c, alpha)
    373         return c, c, c, alpha if alpha is not None else 1.
--> 374     raise ValueError(f"Invalid RGBA argument: {orig_c!r}")
...
 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'
 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'
 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'
 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'
 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica']

2.2 原因

根据错误信息,ValueError: Invalid RGBA argument,似乎是在尝试将 ‘class’ 列的值作为颜色传递给 scatter() 函数时出现了错误。

scatter() 函数要求颜色参数是合法的 RGBA(红绿蓝透明度)值,但 ‘class’ 列的值是字符串类型,不符合颜色参数的要求,因此导致了错误。

如果想将 ‘class’ 列的值用作颜色分类,可以将其转换为数值类型或使用其他方法来将字符串值映射为颜色。

三、第二次尝试(成功)

以下是一种可能的解决方法,将 ‘class’ 列的字符串值映射为颜色编码:

x_axis = data['  sepal length']
y_axis = data['sepal width']
color_map = {'Iris-setosa': 'red', 'Iris-versicolor': 'green', 'Iris-virginica': 'blue'}
# 使用 map 方法将 'class' 列的值映射为颜色编码
colors = data['class'].map(color_map)
c = data['class'].map(color_map)
plt.scatter(x_axis, y_axis, c = c)
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Scatter plot of Sepal Length vs Sepal Width')
plt.show()

运行结果如下:

在这里插入图片描述
这样,‘class’ 列的不同类别将分别用红色、绿色和蓝色表示在散点图中。您可以根据需要自定义颜色编码映射字典,以适应您的数据和可视化需求。

四、总结—plt.scatter()函数的参数

4.1 全部常见的参数

plt.scatter() 函数是 Matplotlib 库中用于绘制散点图的函数,它的常用参数如下:

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

其中,最常用的参数包括:

  1. x:指定散点图的 x 坐标,可以是一个 NumPy 数组、Pandas Series 或 Python 列表;
  2. y:指定散点图的 y 坐标,可以是一个 NumPy 数组、Pandas Series 或 Python 列表;
  3. s:指定散点的大小,可以是一个数值或表示大小的数组,用于控制散点的尺寸;
  4. c:指定散点的颜色,可以是一个数值或表示颜色的数组,用于控制散点的颜色;
  5. marker:指定散点的标记样式,默认为 ‘o’,可以使用常见的标记样式,如 ‘o’、‘s’、‘d’、‘^’ 等;
  6. cmap:指定颜色映射(colormap),用于将数值映射为颜色,一般与 c 参数一起使用;
  7. alpha:指定散点的透明度,取值范围为 0 到 1,0 表示完全透明,1 表示完全不透明;
  8. linewidths:指定散点边界的宽度;
  9. edgecolors:指定散点边界的颜色。

除了上述参数外,plt.scatter() 函数还可以接受其他关键字参数(**kwargs)用于进一步自定义散点图的样式和属性。

注意:参数的具体用法和取值范围可以参考 Matplotlib 官方文档或使用 help(plt.scatter) 查看详细说明。

4.2 其中的c参数

在 plt.scatter() 函数中,c 参数用于指定散点图中的颜色。c 可以接受不同类型的输入:

  1. 单一颜色值:可以使用字符串表示颜色,如 ‘red’、‘green’、‘blue’ 等,表示所有的散点都使用相同的颜色;
  2. 颜色序列:可以使用列表、数组或 Series 对象,表示每个散点的颜色。例如,可以传入一个长度与散点数目相等的列表,其中每个元素表示对应散点的颜色;
  3. 数值映射:可以使用数值映射函数,将数值映射到颜色。例如,可以传入一个与散点数目相等的数值序列,然后使用 cmap 参数指定颜色映射,将数值映射为对应的颜色。

以下是 plt.scatter() 函数中 c 参数的一些常见用法:

4.2.1 使用单一颜色值

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
colors = 'red'  # 指定所有散点的颜色为红色

plt.scatter(x, y, c=colors)
plt.show()

4.2.2 使用颜色序列

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
colors = ['red', 'green', 'blue', 'yellow', 'purple']  # 指定每个散点的颜色

plt.scatter(x, y, c=colors)
plt.show()

4.2.3 使用数值映射

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)  # 生成随机数值序列作为颜色映射

plt.scatter(x, y, c=colors, cmap='viridis')  # 使用 viridis 色彩映射
plt.colorbar()  # 显示颜色映射条
plt.show()

注意:c 参数只接受长度与 x 和 y 相同的输入序列,用于指定每个散点的颜色。如果 c 参数输入的序列长度不符合要求,将会引发错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解客户关系管理系统

一、客户关系管理系统的重要性 客户关系管理系统,是指利用软件、硬件和网络技术,为企业建立一个客户信息收集、管理、分析和利用的信息系统。以客户数据的管理为核心,记录企业在市场营销和销售过程中和客户发生的各种交互行为,以…

Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁

Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁 文章目录 Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁连续时间系统的…

JVM内存区域划分,类的加载过程 以及 双亲委派模型总结

目录 JVM内存区域划分 Java类的加载过程 双亲委派模型 JVM内存区域划分 JVM中的内存区域共划分为五大部分,分别为虚拟机栈、堆、程序计数器、本地方法栈和方法区,如下边这张图所示: 其中,每个内存区域主要存放的数据及功能如下…

Visual Studio C# WinForm开发入门(4):概述

目录 一.Winform入门1.WinForm项目结构2.窗口设计与控件布局3.窗口事件4.时间显示器小练习 二.WinForm布局开发1.手动布局解决自适应问题2.WinForm布局属性3.WinForm布局器 三.WinForm常用控件1.界面展示2.实体类 Student(封装信息)3.逻辑事件代码Form.cs 四.图片框与项目资源1…

大数据电商数仓相关脚本

文章目录 前言一、群起集群1. sc 脚本2. cluster 脚本3. myhadoop 脚本4. zk.sh 脚本5. kf.sh 脚本6. f1.sh 脚本7. f2.sh 脚本 二、简便使用脚本1. xsync 脚本2. jpsall 脚本3. xcall.sh 脚本4. lg.sh 脚本 三、数据传输相关脚本1. mysql_to_hdfs.sh 脚本2. hdfs_to_ods_db.sh…

《JavaEE初阶》HTTP协议和HTTPS

《JavaEE初阶》HTTP协议和HTTPS 文章目录 《JavaEE初阶》HTTP协议和HTTPSHTTP协议是应用层协议:使用Fiddler抓取HTTP请求和响应:Fiddler的下载和基本使用:Fiddler的中间代理人身份:其他抓包工具: 先简单认识HTTP请求与HTTP响应:HTTP请求:HTTP响应: HTTP请求详解:首行&#xff1…

分享10个精美可视化模板,解决95%的大屏需求!

前段时间和朋友一起喝茶,我吐槽着excel表格做报表的繁琐,他惊讶的问我竟然不知道大屏模板这种东西,说是直接套用数据就可以,我震惊的同时吃下了这个安利。 回来之后,我好好研究了一番这个叫可视化大屏的“新鲜玩意儿”…

模块化编程原理示意图--CommonJS 模块编程--ES6 模块编程思路分析/图解--三种导出形式--全部代码示例

目录 模块化编程 基本介绍 模块化编程原理示意图 模块化编程分类 CommonJS 模块编程 介绍 应用实例 1. 需求说明 2. 思路分析/图解 3. 代码实现 function.js use.html use.js ES6 模块编程 介绍 需求说明 思路分析/图解 代码实现 common.js use_common.js …

MySQL入门到精通——进阶篇(基础篇——进阶篇——运维篇)本文以MySQL8.0版本以上为例

文章目录 前言MySQL——进阶篇一、存储引擎1.存储引擎-MySQL体系结构2.存储引擎-简介3.存储引擎-InnoDB介绍4.存储引擎-MyISAM和Memory5.存储引擎-选择 二、索引1.索引-概述2.索引-结构2.1.索引-结构-介绍2.2.索引-结构-Btree2.3.索引-结构-Btree2.4.索引-结构-hash 3.索引-分类…

【Java-02】深入理解关键字和代码块

1 关键字 2 代码块 1 Java中的关键字 1.1 static关键字 static关键字 : 静态的意思 , 可以修饰变量 , 也可以修饰方法 , 被static修饰的成员 , 我们叫做静态成员 static特点 : 静态成员被所类的所有对象共享随着类的加载而加载 , 优先于对象存在可以通过对象调用 , 也可以通…

学习系统编程No.23【信号实战】

引言: 北京时间:2023/4/23,最近学习状态不怎么好,总是犯困,没精力的感觉,可能是病没有好彻底的原因,也可能是我内心因为生病而认为摆烂理所应当,反正最后导致摆烂,课现在…

JetpackCompose从入门到实战学习笔记14——Coli的简单使用

JetpackCompose从入门到实战学习笔记14——Coli的简单使用 1.简介: Coil 是一个 Android官方出的配合Jetpack的图片加载库,通过 Kotlin 协程的方式加载图片。 优点如下: 更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存…

体验了多款国产类ChatGPT产品后,我选择了道合顺的【ChatIC】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

springboot实用配置

springboot实用配置 (一)打包与运行(二)配置高级1.临时属性设置2.配置文件分类3.自定义配置文件 (三)多环境开发(四)日志1.日志基础2.日志输出格式控制3.日志文件 (一&am…

什么是OpenVino?以及如何使用OpenVino运行yolo

目录 Openvino简介 如何使用它? 构建源代码 Openvino IR模型 第一个Openvino示例 C语言示例 C示例 使用OpenVino跑Yolo模型 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。 …

开源,点云处理及三维重建软件(Point Cloud Viewer, PCV)的设计与实现

GitHub地址:point-cloud-viewer GitCode地址:point-cloud-viewer 文章目录 使用教程以及相关工具库Step 1 搭建环境Step 2 使用Cmake构建工程Step3 使用VS 编写code并编译执行 点云处理及三维重建软件(PCV)的设计与实现一, 软件总体设计1.1 软…

C++ LinuxWebServer 2万7千字的面经长文(下)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! Linux Web Server项目虽然是现在C++求职者的人手一个的项目,但是想要吃透这个项目,还是需要一定的基础的,以项目为导向,进行基础的学习。 涵盖了计算机网络(网络编程…

springboot网上商城项目(一)

springboot网上商城项目(一) (一)项目分析1.项目分析2.开发顺序3.前端资源测试 (二)用户注册1.创建数据库2.实体类编写3.注册(持久层)4.注册(业务层)5.注册&a…

类ChatGPT的部署与微调(下):从ChatGLM-6b到ChatDoctor、可商用

前言 随着『GPT4多模态/Microsoft 365 Copilot/Github Copilot X/ChatGPT插件』的推出,绝大部分公司的技术 产品 服务,以及绝大部分人的工作都将被革新一遍 类似iPhone的诞生 大家面向iOS编程 有了App Store现在有了ChatGPT插件/GPT应用商店&#xff…

国产CMS61850那些事-服务端

前面两篇文章国产CMS61850那些事-总述_LinuxZQ的博客-CSDN博客,cms61850那些事-实现_LinuxZQ的博客-CSDN博客分别对国产61850做了一些简单介绍和相关实现。本文接着给大家提供一款服务端demo,可以用来进行抓包等相关学习。 与之前分享的mms 61850一样&am…