python绘制散点图|散点大小和颜色深浅由数值决定

news2024/11/26 23:36:36

python绘图系列文章目录

往期python绘图合集:
python绘制简单的折线图
python读取excel中数据并绘制多子图多组图在一张画布上
python绘制带误差棒的柱状图
python绘制多子图并单独显示
python读取excel数据并绘制多y轴图像
python绘制柱状图并美化|不同颜色填充柱子
python随机生成数据并用双y轴绘制两条带误差棒的折线图
Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)


本文目录

  • python绘图系列文章目录
  • 一、简介
  • 二、生成数据
  • 三、绘制散点图
  • 四、设置坐标轴范围、刻度和标签字体样式
    • 4.1 设置坐标轴范围
    • 4.2 设置坐标轴刻度
    • 4.3 设置坐标轴标签字体样式
  • 五、完整代码
  • 六、 运行结果

一、简介

Python 是一种极为流行的编程语言,它可以用于数据处理、机器学习和可视化等多个领域。Matplotlib 是 Python 里最受欢迎的数据可视化库之一,本文将介绍如何使用 Python 和 Matplotlib 绘制散点图。我们将从数据生成开始,涵盖绘图的各个方面,包括设置坐标轴范围、刻度和标签字体样式,以及调整图例的字体和大小等。
首先,请确保已经安装了以下库:

  1. Python 3.x
  2. NumPy
  3. Matplotlib

如果您还没有安装这些库,可以通过以下方式在命令行中安装:

pip install numpy matplotlib

二、生成数据

在绘制散点图之前,我们需要先生成一些数据。在本篇博文中,我们将生成三组随机数据,代表全班的语文、数学和英语分数。具体来说,我们将使用 numpy 库的 random 模块生成一组包含 1000 个整数的数组,代表每个学生的分数。代码如下:

import numpy as np

nscores = 1000  # 生成 1000 个学生的分数数据
chinese_scores = np.random.randint(50, 100, size=nscores)
math_scores = np.random.randint(40, 90, size=nscores)
english_scores = np.random.randint(60, 100, size=nscores)

使用 numpy 库的 random 模块生成了三组随机数据,分别代表全班的语文、数学和英语分数。其中,randint() 函数用于生成指定范围内的随机整数。这里我们将语文分数限制在 50 到 100 之间(不包括 100),将数学分数限制在 40 到 90 之间(不包括 90),将英语分数限制在 60 到 100 之间(不包括 100)。

三、绘制散点图

使用 Matplotlib 的 scatter() 函数绘制散点图。具体来说,我们将使用 scatter() 函数三次,分别绘制语文分数与数学分数、语文分数与英语分数以及数学分数与英语分数之间的关系。代码如下:

import matplotlib.pyplot as plt

# 创建画布和子图
fig, ax = plt.subplots()

# 绘制散点图
ax.scatter(chinese_scores, math_scores, s=20, alpha=0.8, label='Chinese and Math')
ax.scatter(chinese_scores, english_scores, s=20, alpha=0.8, label='Chinese and English')
ax.scatter(math_scores, english_scores, s=20, alpha=0.8, label='Math and English')

# 展示图形
plt.show()

解释:用了 matplotlib.pyplot 模块的 subplots() 函数创建了一个画布和一个子图。然后,我们分别调用了三次 scatter() 函数,传递了相应的参数。其中,s 参数指定散点的大小,alpha 参数指定散点的透明度,label 参数指定每组数据的标签。

四、设置坐标轴范围、刻度和标签字体样式

进一步美化图表,比如设置坐标轴范围、刻度和标签字体样式

4.1 设置坐标轴范围

在散点图中,通常需要设置坐标轴的范围以确保数据能够显示在图表中。在 Matplotlib 中,我们可以使用 set_xlim() 和 set_ylim() 函数来设置 x 轴和 y 轴的范围。例如,如果我们希望 x 轴的范围在 0 到 100 之间,y 轴的范围在 20 到 100 之间,那么可以按照以下方式修改代码:

ax.set_xlim(0, 100)
ax.set_ylim(20, 100)

4.2 设置坐标轴刻度

在散点图中,可能需要设置不同的刻度大小以更好地展示数据。在 Matplotlib 中,我们可以使用 set_xticks() 和 set_yticks() 函数来设置 x 轴和 y 轴的刻度位置。例如,如果我们希望 x 轴和 y 轴每隔 10 个单位就显示一个刻度,那么可以按照以下方式修改代码:

ax.set_xticks(range(0, 101, 10))
ax.set_yticks(range(20, 101, 10))

4.3 设置坐标轴标签字体样式

在散点图中,需要给 x 轴和 y 轴分别添加标签以说明数据含义。在 Matplotlib 中,我们可以使用 set_xlabel() 和 set_ylabel() 函数来添加标签,并使用 fontname 参数指定标签字体。例如,如果我们想要将 x 轴标签设置为“语文分数”,将 y 轴标签设置为“数学分数/英语分数”,并将标签字体设置为 Times New Roman,那么可以按照以下方式修改代码:

ax.set_xlabel('Chinese Scores', fontname='Times New Roman')
ax.set_ylabel('Math Scores / English Scores', fontname='Times New Roman')
for tick in ax.get_xticklabels():
    tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
    tick.set_fontname("Times New Roman")

五、完整代码

得到了如下完整的代码,其中包括数据生成、绘图、设置坐标轴范围、刻度和标签字体样式,以及调整图例的字体和大小等步骤。

import matplotlib.pyplot as plt
import numpy as np

font = {'family':'Times New Roman','size':14}
# 生成三组随机数据,代表全班的语文、数学和英语分数
nscores = 60  # 生成 60 个学生的分数数据
chinese_scores = np.random.randint(50, 100, size=nscores)
math_scores = np.random.randint(40, 90, size=nscores)
english_scores = np.random.randint(60, 100, size=nscores)

# 创建画布和子图
fig, ax = plt.subplots(figsize=(8,5),dpi = 600)

# 绘制散点图,并指定不同颜色、大小和透明度
x = np.arange(nscores)
y = x
s1 = 3*chinese_scores   # 大小与分数相关
s2 = math_scores*2
s3 = english_scores *1
c1 = chinese_scores  # 颜色深浅与温度相关
c2 = math_scores 
c3 = english_scores 
ax.scatter(chinese_scores, math_scores, s=s1, c=c1, cmap='coolwarm', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='Chinese')
ax.scatter(chinese_scores, english_scores, s=s2, c=c2, cmap='PiYG', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='Math')
ax.scatter(math_scores, english_scores, s=s3, c=c3, cmap='rainbow', norm=plt.Normalize(vmin=0, vmax=1), alpha=0.8, label='English')



# 设置坐标轴范围、刻度和标签字体样式
ax.set_xlim(40, 100)
ax.set_ylim(40, 110)
ax.set_xticks(range(40, 110, 10))
ax.set_yticks(range(40, 110, 10))
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.size'] = 20
ax.set_xlabel('Chinese Scores', fontname='Times New Roman')
ax.set_ylabel('Math Scores / English Scores', fontname='Times New Roman')
for tick in ax.get_xticklabels():
    tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
    tick.set_fontname("Times New Roman")

ax.legend(ncol=3,loc=1,prop=font)
plt.tight_layout()
# plt.savefig('散点图.jpg')
# 展示图形
plt.show()


六、 运行结果

在这里插入图片描述

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

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

相关文章

【嵌入式系统应用开发】FPGA——HLS入门实践之led灯闪烁

目录 1 HLS1.1 HLS简介1.2 HLS与VHDL/Verilog1.3 HLS优点与局限 2 环境配置3 HLS实例——Led点亮3.1 工程创建3.2 添加文件3.3 C仿真与C综合3.4 创建Vivado工程3.5 导入HLS生成的IP核3.6 添加实验代码3.7 编译生成获取结果 总结 1 HLS 1.1 HLS简介 HLS(High Level Synthesis)…

十大排序算法(上)直接插入排序、希尔排序、直接选择排序、堆排序

🌈目录 1. 排序的概念2. 常见的排序算法3. 排序算法的实现3.1 插入排序3.1.1 直接插入排序3.1.2 希尔排序(缩小增量排序) 3.2 选择排序3.2.1 基本思想3.2.2 直接选择排序3.2.3 堆排序 1. 排序的概念 排序,就是使一串记录&#xf…

阿里通义千问_VS_讯飞星火

今天终于获得阿里通义千问大模型体验授权,第一时间来测试一下效果,使用申请手机号登录(地址:https://tongyi.aliyun.com)后,需要同意通义千问大模型体验规则,如下图所示: 同意之后就…

【C++初阶】类与对象(中)之运算符重载 + 赋值运算符重载

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

CPU性能优化:Cache

CPU性能提升:Cache机制 随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁的数据交换的内存的运行速度却没有相应的提升,于是两者之间产生了带宽问题。进而影响计算机系统的整体性能。CPU执行一条指令需…

C++/PTA 至多删三个字符

至多删三个字符 题目要求解题思路代码总结 题目要求 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的、长度在区间 […

关于摆摊气球的调研-网红气球

本章主要介绍一下最近网红气球: 最近看到很多摆摊的抖音视频,都在说卖气球很好,成本低,收益高,所以调研了一下,网红气球分好几种: a,飘空气球; b.手持网红气球 c.青蛙 首先介绍飘空…

文件上传,内容逻辑数组绕过(22)

uploadd 第十三关 这一关告诉我们的,有一些上传漏洞需要配合这个文件包含和加解密。 这个先在一个图片源码里面写入php后门的脚本代码 这里也可以手工注入到图片的源码里面来,手工注入,如果采用16进制打开这个图片,这个图片在…

okhttp篇4:RetryAndFollowUpInterceptor

在上一篇 okhttp篇3:RealCall_yolan6824的博客-CSDN博客 中讲到RealCall无论是在execute还是enqueue方法中,都是通过getResponseWithInterceptorChain方法获取Request对应的Response的。而getResponseWithInterceptorChain这个方法,又是通过…

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手,在使用虚…

【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

文章目录 1. 目的2. 理念: vimsolo3. vimrc: 配置颜色4. vimrc: 配置状态栏5. 拷贝颜色主题和.vimrc: python安装脚本 1. 目的 习惯了 VSCode 默认的配色:黑色主题,蓝色状态栏。偶尔使用 Vim 时想让 vim 伪装的像 VSCode,不考虑花…

Web 测试和 App 测试重点总结

单纯从功能测试的层面上来讲的话,App 测试、Web 测试在流程和功能测试上是没有区别的,但由于系统结构方面存在差异(web 项目,b/s 架构;app 项目,c/s 结构)在测试中还是有不同的侧重点内容&#…

ZED使用指南(八)Depth Sensing

ZED立体相机再现了人类双目视觉的工作方式。通过比较左眼和右眼看到的两种视图,不仅可以推断深度,还可以推断空间中的3D运动。 ZED立体相机可以捕捉到场景的高分辨率3D视频,通过比较左右图像之间的像素位移可以估计深度和运动。 深度感知 …

CTFHub-ctfhub-Git泄露-Log

CTFHub-ctfhub-Git泄露-Log 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题 1、dirsearch扫描 github上下载dirsearch-master 命令F…

SpringMVC第二阶段:@RequestMapping注解详解

RequestMapping注解详解 RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序,在web.xml中配置了访问地址之后,它们之间就有一个访问映射关系。 1、value属性 value 属性用于配置方法对应的访问地址. /*** RequestMapping 可以配…

JavaScript实现背景图像切换3D动画效果

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! &am…

Flask全套知识点从入门到精通,学完可直接做项目

目录 Flask入门 运行方式 URL与函数的映射(动态路由) PostMan的使用 查询参数的获取 上传文件 其它参数 url_for 函数 响应-重定向 响应-响应内容 响应-自定义响应 Flask模板 模板介绍 模板的使用 模板-传参 模板使用url_for函数 过滤器介绍 Jinja模板自带过滤器 流程…

DTFT和DFT有何区别?一文为你讲解清楚

很多人在开始学习数字信号处理的时候,对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚,IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT和DFT的区别吧。 DTFT, DFT 的区别是含义不同、性质不同、用途…

Elasticsearch集群搭建与相关知识点整理

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch集群的搭建,以及Elasticsearch集群相关知识点整理。 如果文章有什么需要改进的地方还请大佬不吝赐教&am…

C++刷题--选择题4

1, 在()情况下适宜采用 inline 定义内联函数 A 函数体含有循环语句 B 函数体含有递归语句 C 函数代码少、频繁调用 D 函数代码多,不常调用 解析 C,以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方…