Matplotlib图形配置--自定义坐标刻度

文章目录

  • 自定义坐标刻度
    • 编程要求
    • 代码解释


自定义坐标刻度

虽然matplotlib默认的坐标轴定位器与格式生成器可以满足大部分需求,但是并非对每一幅图都合适。

主次要刻度
学习前最好先对matplotlib图形的对象层级有深入了解。

matplotlib的figure对象是一个盛放图形元素的包围盒。可以将每个matplotlib对象都看成是子对象的容器,每个figure都包含axes对象,每个axes对象又包含其他表示图形内容的对象,比如xaxis/yaxis,每个属性包含构成坐标轴的线条、刻度和标签的全部属性。

每一个坐标轴都有主次要刻度,主要刻度要比次要刻度更大更显著,而次要刻度往往更小。

import matplotlib.pyplot as plt
import numpy as np
ax = plt.axes(xscale='log', yscale='log')
plt.show()

可以看到主要刻度都显示为一个较大的刻度线和标签,而次要刻度都显示为一个较小的可读性,不显示标签。

隐藏刻度与标签
最常用的刻度/标签格式化操作可能就是隐藏刻度与标签了,可以通过plt.NullLocator()和plt.NullFormatter()实现。

示例如下:

ax = plt.axes()
ax.plot(np.random.rand(50))
ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
plt.show()

这里x轴的标签隐藏了但是保留了刻度线,y轴的刻度和标签都隐藏了。有的图片中都不需要刻度线,比如下面这张包含人脸的图形:

fig, ax = plt.subplots(5, 5, figsize=(5, 5))
fig.subplots_adjust(hspace=0, wspace=0)

从scikit-learn获取一些人脸照片数据

from sklearn.datasets import fetch_olivetti_faces
faces = fetch_olivetti_faces().images
for i in range(5):for j in range(5):ax[i, j].xaxis.set_major_locator(plt.NullLocator())ax[i, j].yaxis.set_major_locator(plt.NullLocator())ax[i, j].imshow(faces[10 * i + j], cmap="bone")
plt.show()

花哨的刻度格式
matplotlib默认的刻度格式可以满足大部分的需求。虽然默认配置已经很不错了,但是有时候可能需要更多的功能,比如正弦曲线和余弦曲线。

默认情况下刻度为整数,如果将刻度与网格线画在π的倍数上图形会更加自然,可以通过设置一个multipleLocator来实现将刻度放在你提供的数值倍数上:

fig, ax = plt.subplots()
x = np.linspace(0, 3 * np.pi, 1000)
ax.plot(x, np.sin(x), lw=3, label='Sine')
ax.plot(x, np.cos(x), lw=3, label='Cosine')

设置网格、图例和坐标轴上下限

ax.grid(True)
ax.legend(frameon=False)
ax.axis('equal')
ax.set_xlim(0, 3 * np.pi)
ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4))
plt.show()

matplotlib还支持用数学符号来做刻度,在数学表达式两侧加上美元符号$,这样就可以方便地显示数学符号和数学公式。

可以用plt.FuncFormatter来实现,用一个自定义函数设置不同刻度标签的显示:

def format_func(value, tick_number):

找到π/2的倍数刻度

    N = int(np.round(2 * value / np.pi))if N == 0:return "0"elif N == 1:return r"$\pi/2$"elif N == 2:return r"$\pi$"elif N % 2 > 0:return r"${0}\pi/2$".format(N)else:return r"${0}\pi$".format(N // 2)
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))

格式生成器与定位器
前面已经介绍了一些格式生成器和定位器,这里再用表格简单总结一些内置的格式生成器和定位器:

定位器 描述
NullLocator 无刻度
FixedLocator 刻度位置固定
IndexLocator 用索引作为定位器
LinearLocator 从min到max均匀分布刻度
LogLocator 从min 到max按对数分布刻度
MultipleLocator 刻度和范围都是基数的倍数
MaxNLocator 为最大刻度找到最优位置
AutoMinorLocator 次要刻度的定位器
格式生成器 描述
NullFormatter 刻度上无标签
IndexFormatter 将一组标签设置为字符串
FixedFormatter 手动为刻度设置标签
FuncFormatter 用自定义函数设置标签
FormatStrFormatter 为每个刻度值设置字符串格式
ScalarFormatter 为标量值设置标签
LogFormatter 对数坐标轴的默认格式生成器

编程要求

在右侧编辑器补充代码,根据file_path读取文件,统计不同二级类的数量做折线图并旋转x坐标轴90度,具体要求如下:

图形的figsize为(10, 10);

图形需保存到Task3/img/T1.png。

数据内容如下:
在这里插入图片描述

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['simhei']
plt.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus']=Falsedef student(file_path):# ********* Begin *********#plt.figure(figsize=(10,10))data=pd.read_csv(file_path)a=data.groupby(["二级类"])["二级类"].count()plt.plot(a)plt.xticks(rotation=90)plt.savefig("Task3/img/T1.png")plt.show()# ********* End *********#

代码解释

创建图形对象并设置大小:

plt.figure(figsize=(10,10))

这行代码初始化一个图形窗口,并设置其大小为10x10英寸。

读取CSV文件:

data=pd.read_csv(file_path)

使用pandas库的read_csv函数读取file_path指定的CSV文件,并将数据存储在data变量中。注意,这里变量名由file_name更改为file_path,这表示传入的参数应该是一个文件路径字符串。

数据分组统计:

a=data.groupby(["二级类"])["二级类"].count()

使用pandas的groupby函数对data中的数据按照“二级类”列进行分组,然后使用count函数计算每个“二级类”分组中的行数(即每个类别的数量)。结果存储在a变量中,这是一个Series对象,索引是“二级类”的唯一值,值是对应的计数。

绘制折线图:

plt.plot(a)

使用matplotlib的plot函数绘制a的折线图。由于a是一个Series对象,它的索引(即“二级类”的唯一值)将作为x轴的值,它的值(即每个类别的数量)将作为y轴的值。

设置x轴刻度标签的旋转角度:

plt.xticks(rotation=90)

这行代码设置x轴刻度标签的旋转角度为90度,通常用于当x轴标签较长或较多时,避免它们之间的重叠,使图表更易读。

保存图表:

plt.savefig("Task3/img/T1.png")

使用savefig函数将当前绘制的图表保存为PNG格式的图像文件,文件名为T1.png,保存在Task3/img/目录下。如果目录不存在,代码将会抛出异常。

显示图表:

plt.show()

最后,使用show函数在屏幕上显示图表。如果代码运行在一个支持图形用户界面的环境中,这将会弹出一个窗口来显示图表。


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

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

相关文章

Oracle集群ASM磁盘扩容

先通过lsblk来查看集群两端磁盘是否扩容成功 lsblk -a查看自己两边磁盘UUID是否相同(for i in 后面为磁盘sd后字母名) for i in x y z aa ab ac ad ae do echo "KERNEL\"sd*\", SUBSYSTEM\"block\", PROGRAM\"/lib/udev/scsi_id --whitelist…

Vue 3中的ref:响应式变量的强大工具

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

jeecgboot 开放页面权限,免登录访问

前端需要配置路由和添加白名单 1、配置路由 2、 在permission.js里,把刚才的路由添加到白名单 3、 后端需要把该页面涉及到的接口排除权限拦截 比如我这个页面涉及到两个接口: 那么就在后端的excludeUrls把这两个接口加进去。 前端后端都设置好了&…

AI皮肤测试的基本原理

人工智能测试皮肤的实现原理通常涉及计算机视觉和机器学习技术。以下是一般的实现步骤和原理,涉及数据收集、特征提取、模型训练和优化等多个步骤,利用这些步骤中的技术手段来实现对皮肤状况的识别和分类。北京木奇移动技术有限公司,专业的软…

在用Java写算法的时候如何加快读写速度

对于解决该方法我们一般如下操作,不需要知道为什么,有模板(个人观点) 使用BufferedReader代替Scanner:Scanner类在读取大量输入时性能较差,而BufferedReader具有更高的读取速度。可以使用BufferedReader的r…

Yolov8将.pt文件转换为tensorRt的.trt文件(模型部署)

我的环境 确保自己已经有cuda和cudnn的环境基础上进行。 cuda:11.7cudnn:适合cuda的版本Anaconda3 [python 3.10]TensorRt-8.6.1 安装TensorRt环境 查看自己的cuda环境,去官网下载适合的win版本。 官网地址 下载后解压,将解压后lib目录添加到环境变…

总结:Spring循环依赖详解与@Lazy注解使用详解

总结:Spring循环依赖详解与Lazy注解使用详解 一前提知识储备:1.Spring Bean生命周期机制(IOC)2.Spring依赖注入机制(DI)(1)Autowired注解标注属性set方法注入(2&#xff…

Altium Designer如何对走线模式进行切换

AD软件提供了比较智能的走线模式切换功能,可以根据个人习惯进行切换,能有效的提高了PCB设计效率。 点击界面右上角系统参数的图标 或者在pcb界面中使用快捷键OP进入到优选项界面,然后选中 PCB Editor-Interactive Routing,在布线…

【C++】面向过程与面向对象

文章目录 1. 面向过程与面向对象2. 类(class)类的作用域 3. 访问限定符封装 4. 类的实例化5. this指针 1. 面向过程与面向对象 C语言是面向过程(procedure-oriented)的语言,分析出求解问题的步骤,通过函数…

mmdetection如何计算准确率、召回率、F1值

1、训练 python tools/train.py configs/fcos/fcosrdweed3.py 2、测试 这一步要加–outresult.pkl,才能计算准确率和召回率 python tools/test.py configs/fcos/fcosrddweed3.py work_dirs/fcosrddweed3/epoch_300.pth --outresultfcos.pkl3、计算准确率和召回率…

LDA 关键词提取

目录 介绍 主题数确认 代码实现 普通关键词提取 TF-IDF,textRank 实现链接:gensim 实现 TF-IDF;textRank 关键词提取_gensim tfidf关键词-CSDN博客 它们是直接从文本中提取关键词,如果想基于一些潜在语义,可以用 L…

表的连接【MySQL】

文章目录 什么是连接测试表内连接外连接左外连接右外连接全外连接 自然连接交叉连接参考资料 什么是连接 数据库的连接是指在数据库系统中,两个或多个数据表之间建立的关联关系,使它们可以进行数据的交互和操作。连接通常基于某种共同的字段或条件&…

力扣每日一题 猜数字游戏 阅读理解

Problem: 299. 猜数字游戏 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 Code class Solution {public String getHint(String secret, String guess) {int a 0;int[] cntS new int[10];int[] cntG new int[10];for(int i 0; i < secret.length(); i){if(secre…

Vscode连接外部虚拟环境

如果vscode工程目录里面有一个超级大的虚拟环境文件夹&#xff0c;怎么说都不是一件优雅的事&#xff0c;因此我们希望这个虚拟环境在工程目录外部&#xff0c;我们开始&#xff1a; 1. 复制虚拟环境目录路径&#xff1a;E:\envs\test 2. 在vscode中打开文件夹&#xff0c;CT…

一文详解WebView,不好理解就想想iframe,类比后秒懂了。

Hi&#xff0c;我是贝格前端工场&#xff0c;又到了给大家做技术扫盲的时候&#xff0c;本文讲一讲webview&#xff0c;有些老铁觉得很难懂&#xff0c;其实借助iframe来中转一下&#xff0c;就好理解了。 WebView是一种用于在应用程序中显示Web内容的组件。它可以嵌入到应用程…

【C++】关键字:auto

文章目录 1. 介绍2. 如何使用 1. 介绍 从C11开始&#xff0c;auto变成了类型指示符&#xff08;之前auto并不是这个作用&#xff09;。使用auto定义变量时必须对其进行初始化&#xff0c;在编译阶段编译器自动推导auto变量的实际类型。因此auto并非是一种“类型”的声明&#…

柚见第十期(后端队伍接口详细设计)

创建队伍 用户可以 创建 一个队伍&#xff0c;设置队伍的人数、队伍名称&#xff08;标题&#xff09;、描述、超时时间 P0 队长、剩余的人数 聊天&#xff1f; 公开 或 private 或加密 信息流中不展示已过期的队伍 请求参数是否为空&#xff1f;是否登录&#xff0c;未登录不…

FX110网:在CP Markets申请出金四个多月了,没任何消息!

近期&#xff0c;本站收到一中国汇友投诉&#xff0c;称其CP Markets平台已数月无法出金&#xff0c;平台方也没有任何回应。在货币市场闯荡久了的“老鸟”就会知道&#xff0c;平台无故不给出金必定有妖&#xff0c;更何况还是长达数月&#xff01; 在CP Markets申请出金四个多…

Anaconda下载安装及配置pytorch环境

先解释一下Python、Anaconda、Pytorch是啥 Python是一种广泛使用的编程语言&#xff0c;在许多领域都有应用。它具有简洁的语法&#xff0c;易于学习&#xff0c;并且有大量的第三方库可以使用。 Anaconda是一个Python的包和环境管理软件&#xff0c;提供了许多用于数据科学&a…

51、WEB攻防——通用漏洞验证码识别复用调用找回密码重定向状态值

文章目录 回显状态判断用户名重定向验证码回显显示验证码简单机制验证码复用验证码智能识别验证码接口调用安全修复建议 回显状态判断 request前端判断不安全&#xff08;前端接收验证的返回值来进行判断)&#xff0c;使用burp的Response to this request可以抓取返回包~ 这种…