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

news/2024/3/28 21:14:18/文章来源:https://blog.csdn.net/wzk4869/article/details/130378302

最近在进行绘图时,遇到了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 pltx = [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 pltx = [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 npx = 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.luyixian.cn/news_show_103871.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法记录lday3 LinkedList 链表移除 + 链表构建 + 链表反转reverse

今日任务 ● 链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表 链表理论基础 建议:了解一下链接基础,以及链表和数组的区别 文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A…

JavaWeb搭建| Tomcat配置| Maven依赖|这一篇就够了(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

记录自己第一次项目管理(附件:WBS计划与会议纪要模板)

记录自己第一次项目管理 前言 20**年新入职到一家公司,刚到就接到紧急任务,因为上一个后端跑路,现在系统上出现接口报错、假接口的问题,客户又着急验收,所以入职之后,一直在着急改代码。最后因为系统没有…

思科模拟器 | 生成树协议STP、RSTP、HSRP配置

一、生成树协议STP 概念介绍: 生成树协议是一种网络协议,用于在交换机之间建立逻辑上的树形拓扑结构避免产生环路。为了完成这个功能,生成树协议需要进行些配置,包括根桥的选举、端口的状态切换等。 步骤明细: 使用思…

游戏测试的面试技巧

游戏测试的面试技巧 1.自我介绍 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验 ,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入…

实现PXE批量网络装机及kickstrat无人值守安装(富士山终究留不住欲落的樱花)

一、PXE概述和部署PXE批量装机 1.PXE简介 PXE(预启动执行环境,在操作系统之前运行)是由Intel公司开发的网络引导技术,c/s架构,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统…

燃气管道定位83KHZ地下电子标识器探测仪ED-8000操作指南

1、电子标识器探测工作 燃气管道定位83KHZ地下电子标识器探测仪ED-8000,探测时周边 3 米范围内不能有其他探测仪,保持探测仪垂直向 下,探测仪的末端距离地面 5~10cm 左右,延估计的埋地管线走向水平移动探测仪。当发现持续信号且信…

RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘解决方法

问题出现的场景: 输入: import torch import torch.nn as nn atorch.randint(10,[3,4]) # atorch.DoubleTensor(a) # aa.double() print(a) layer_normnn.LayerNorm(4) layer_norm(a) 我就是想测试一下经过layernorm之后的输出会变成什么样 但是报错…

量表题如何分析?

量表是一种测量工具,量表设计标准有很多,并且每种量表的设计都有各自的特性,不同量表的特性也决定了测量尺度,在数据分析中常用的量表为李克特量表。李克特量表1932年由美国社会心理学家李克特在当时原有总加量表的基础上进行改进…

eBPF的发展演进---从石器时代到成为神(二)

3. 发展溯源 回顾技术的发展过程,就像观看非洲大草原日出日落一样,宏大的过程让人感动,细节部分引人深思。每天循环不辍,却又每天不同。 BPF的应用早已超越了它最初的设计,但如果要追溯BPF最初的来源,则必…

kubernetes为何需要默认的serviceaccount?

文章目录 什么是k8s的serviceAccount?为什么每一个ns下都有默认的sa?default sa yaml 默认的sa下都会挂一个secret,这个secret是从哪里来的?一道关于RBAC的CKA考题1、创建一个新的 ServiceAccount2、创建一个新的 Role3、创建一个…

2023_8.0.33版windows版MySql安装_配置远程连接_修改设置初始密码---MySql工作笔记0001

MySQL :: Download MySQL Community Server https://dev.mysql.com/downloads/mysql/ 首先去下载mysql 可以看到这里下载第一个就可以了,最新版的8.0.33 这里点击仅仅下载 just start my download 然后解压到一个文件夹,然后配置一下环境变量 然后新建一个my.ini文件 然后把…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换: x ( …

速卖通正式推出全托管,卖家竞争进入新阶段

全托管来了,卖家就能安心做甩手掌柜吗? 正式推出全托管 显而易见,越来越多的平台正在转向全托管模式。 近日,速卖通在2023年度商家峰会上,正式推出了全托管服务模式。官方表示,托管是对速卖通平台商家服…

golang微服务项目通用流水线

golang微服务项目通用流水线 工作中随着业务越来越大,微服务的项目也越来越多,最开始的时候是一个服务一个流水线,然后还分了三个环境,也就是一个服务三个流水线,后面就越来越不利于管理维护了,因此&#…

持续集成——App自动化测试集成实战

这里写目录标题 一、app自动化测试持续集成的好处二、环境准备三、Jenkins节点挂载四、节点环境的配置1、JDK2、模拟器3、sdk环境4、Python3环境5、allure-commandline工具6、allure插件 五、本地运行待测代码(保证代码没有问题)六、库文件的导出七、Jenkins上运行代码配置1、指…

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…

智慧班牌源码,使用springboot框架Java+vue2开发,二次开发方便快捷

智慧校园云平台电子班牌系统源码 智慧校园平台电子班牌系统源码在大数据平台下,对应用系统进行统一,以数据互联软硬结合的特点应用在校园,实现对校园、班级、教师、学生的管理。 智慧校园云平台电子班牌系统源码,使用springboot…

【视频课程】算法工程师需要的ChatGPT大模型算法理论与实践课程!非粗浅科普...

前言 自从2022年11月ChatGPT发布之后,迅速火遍全球。其对话的交互方式,能够回答问题,承认错误,拒绝不适当的请求,高质量的回答,极度贴近人的思维的交流方式,让大家直呼上瘾,更是带火…

软件开发全套文档案例分享

写在前面 在日常项目开发过程中,会产生大量的过程文档,比如开发过程中的文档、管理过程中的文档、产品相关文档等等,那这些文档我们日常怎么去管理呢?怎么去做规划呢?如何做成通用标准呢?小编特地整理了一…