python plt 绘图详解(plt.版本)

2023-11-18

一.plt介绍

  python中的绘图工具 :matplotli,专门用于画图。

二.安装与导入

  工具包安装:

conda install matplotli

  导入:

import matplotlib.pyplot as plt

三.使用说明

1. 使用plt.plot与plt.show绘制并显示图像

plt.plot(x, y, color, linestyle, marker, markersize, markeredgewidth, markeredgecolor, markerfacecolor, alpha, linewidth)

(1)曲线颜色(color 简写为 c):

r g b y k
红色 绿色 蓝色 黄色 黑色

(2)点型(标记marker):

+ o * . x s d ^ v p
加号 圆圈 星号 实心点 叉号 正方形 钻石形 上三角 下三角 五角星

(3)线型(linestyle 简写为 ls):

- -.
实线 虚线 点线 点横线

(4)剩余参数说明

markersize 简写为 ms(标记大小):实数

markeredgewidth 简写为 mew(标记边缘宽度):实数

markeredgecolor 简写为 mec(标记边缘颜色):颜色选项中的任意值

markerfacecolor 简写为 mfc(标记表面颜色):颜色选项中的任意值

alpha(透明度): [0,1]之间的浮点数

linewidth(线宽):实数

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 绘制的曲线属性设置
line1, = plt.plot(x, y, color='r', marker='d', linestyle='--', markersize=6, alpha=0.5, linewidth=3)
line2, = plt.plot(x, y2, color='g', marker='*', linestyle='-', markersize=6, alpha=0.5, linewidth=3)
# plt.plot(x, y, 'rd--')  # 可以使用这种方式进行画图的属性设置

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

# 显示曲线图像
plt.show()
plt.show()显示结果

2.图像属性设置

(1)坐标轴标签设置

# 注意,要使用中文的话,需要在引入库后,添加下列代码
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

(2)图像标题设置

# 设置图表标题
plt.title(u"图像标题", fontsize=14, color='k')

(3)图例设置

# 添加图例
plt.legend([line1, line2], ["Weekend", "Weekday"], loc='upper left')

(4)坐标轴范围设置

# 设置x轴的范围为[0, 100],y轴的范围为[0, 100], 或者通过xlim, ylim设置XY轴的范围上下限
plt.axis([0, 10, 0, 100])
# plt.xlim(0, 10)
# plt.ylim(0, 100)

(5)坐标间隔设定

plt.xticks(参数一,参数二,参数三) 用来实现对x轴和y轴坐标间隔(也就是轴记号)的设定。

  • 参数一:x或者y的参数
  • 参数二:新的标签,个数必须和参数一个数相同
  • 参数三:旋转角度
# 坐标间隔及标签设定
a = [1, 2, 3, 4, 5]
labels = ['A', 'B', 'C', 'D', 'E']
plt.xticks(a, labels, rotation=0)

(6)添加网格

# 添加网格
plt.grid(visible=True, axis='x')  # 只显示x轴网格线
plt.grid(visible=True, axis='y')  # 只显示y轴网格线
最终显示效果

全部代码

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 绘制的曲线属性设置
line1, = plt.plot(x, y, color='r', marker='d', linestyle='--', markersize=6, alpha=0.5, linewidth=3)
line2, = plt.plot(x, y2, color='g', marker='*', linestyle='-', markersize=6, alpha=0.5, linewidth=3)
# plt.plot(x, y, 'rd--')  # 可以使用这种方式进行画图的属性设置

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

# 设置图表标题
plt.title(u"图像标题", fontsize=14, color='k')

# 添加图例
plt.legend([line1, line2], ["Weekend", "Weekday"], loc='upper left')

# 设置x轴的范围为[0, 100],y轴的范围为[0, 100], 或者通过xlim, ylim设置XY轴的范围上下限
plt.axis([0, 10, 0, 100])
# plt.xlim(0, 10)
# plt.ylim(0, 100)

# 坐标间隔及标签设定
a = [1, 2, 3, 4, 5]
labels = ['A', 'B', 'C', 'D', 'E']
plt.xticks(a, labels, rotation=0)

# 添加网格
plt.grid(visible=True, axis='x')  # 只显示x轴网格线
plt.grid(visible=True, axis='y')  # 只显示y轴网格线

# 显示曲线图像
plt.show()


3.一张图像上绘制多个图

  • 使用plt.figure(arg)创建画板,arg为画板名称
  • 使用plt.subplot(arg1, arg2, arg3)方法创建画纸,并选择当前画纸并绘图。其中,ag1代表第几行,arg2代表第几列,arg3代表第几个图像
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = np.arange(0, 100, 10)

plt.figure(1)  # 生成第一个图,且当前要处理的图为fig.1

plt.subplot(1, 2, 1)  # fig.1是一个一行两列布局的图,且现在画的是左图
y1 = np.exp(x)
plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1)  # 画图
plt.xlabel("x")
plt.ylabel("y1")

plt.figure(1)  # 当前要处理的图为fig.1,而且当前图是fig.1的左图
plt.subplot(1, 2, 2)  # 当前图变为fig.1的右图
y2 = np.exp(1.5 * x)
plt.plot(x, y2, color="b", linestyle="-", marker="v", linewidth=1)
plt.xlabel("x")
plt.ylabel("y2")

plt.show()
多图显示

4.在一张图上绘制双坐标轴

主要通过fig.add_subplot()来添加坐标轴,然后把坐标轴绘制在同一张图上

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# 生成数据
x = np.arange(1, 12, 4)
y = np.arange(1, 4, 1)
x2 = x * 10
y2 = y ** 2

# 设置画布大小
width, height = 16, 14  # 单位为cm;因为保存图片时使用 bbox_inches = 'tight' 可能使图片尺寸略微放大,所以此处宽度设置得略小

# 设置刻度线在坐标轴内
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# 绘制图像
lns = []  # 用于存储绘图句柄以合并图例的list

# 创建画布并设置大小
fig = plt.figure()
fig.set_size_inches(width / 2.54, height / 2.54)  # 因为画布输入大小为厘米,此处需转换为英寸,所以除以2.54

# 通过 add_subplot 方式创建两个坐标轴,相当于在同一个子图上叠加了两对坐标系
ax = fig.add_subplot(111, label="1")
ax2 = fig.add_subplot(111, label="2", frame_on=False)

# 绘制图1并将绘图句柄返回,以便添加合并图例
lns1 = ax.plot(x, y, color='r', label='r')
lns = lns1
lns2 = ax2.plot(x2, y2, color='b', label='b')
lns += lns2

# 调整第二对坐标轴的label和tick位置,以实现双X轴双Y轴效果
ax2.xaxis.tick_top()
ax2.yaxis.tick_right()
ax2.xaxis.set_label_position('top')
ax2.yaxis.set_label_position('right')

# 设置坐标轴标注
ax.set_xlabel("X1", color='r', fontsize=12)
ax.set_ylabel("Y1", color='r', fontsize=12)
ax2.set_xlabel('X2', color='b', fontsize=12)
ax2.set_ylabel('Y2', color='b', fontsize=12)

# 设置图表标题
fig.suptitle("Title", fontsize=12)

# 设置坐标轴刻度颜色
ax.tick_params(axis='x', colors='r')
ax.tick_params(axis='y', colors='r')
ax2.tick_params(axis='x', colors='b')
ax2.tick_params(axis='y', colors='b')

# 设置坐标轴线颜色
ax.spines["left"].set_color("r")  # 修改左侧颜色
ax.spines["right"].set_color("b")  # 修改右侧颜色
ax.spines["top"].set_color("b")  # 修改上边颜色
ax.spines["bottom"].set_color("r")  # 修改下边颜色

# 添加图例
labs = [l.get_label() for l in lns]
ax.legend(lns, labs, loc=0, fontsize=12)
plt.tight_layout()
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python plt 绘图详解(plt.版本) 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • Qt开发经验(转载)

    0 前言说明 本文转载于https qtchina blog csdn net type blog feiyangqingyun的博客 感谢大佬的经验分析 1 开发经验 01 001 010 当编译发现大量错误的时候 从第一个看起 一个一个
  • C++ 常量引用

    黑马程序员C P94 常量引用 感觉这部分有很多内容 但目前我的理解就是在形参前加上const 防止误操作 先占个坑后面再补充
  • 第二章节:期货市场组织结构与投资者

    各组织的性质 职能 形式 组织架构 权利 义务等 期货结算制度 期货投资者种类等 第一节 期货交易所 本节考点 一 期货交易所的性质 宗旨与职能 重点掌握 二 期货交易所的组织结构 重点掌握 三 我国境内期货交易所 重点掌握 一 期货交易所
  • Java中的static关键字解析

    一 static关键字的用途 在 Java编程思想 P86页有这样一段话 static方法就是没有this的方法 在static方法内部不能调用非静态方法 反过来是可以的 而且可以在没有创建任何对象的前提下 仅仅通过类本身来调用static
  • HDU-7304 2023“钉耙编程”杭电多校赛(3)Out of Control

    2023 钉耙编程 中国大学生算法设计超级联赛 3 Out of Control 题目大意 有 n n n个数 x 1 x
  • 区块链三加一:深度论区块链的联盟链意义与作用

    随着区块链技术的发展 越来越受个人及企业的关注 而和区块链联系最为紧密的 恐怕就是金融行业了 然而虽然区块链大受热捧 但毕竟区块链是属于公有区块链 公有区块链有着其不可编辑 不可篡改的特点 这就使得公有链并不适合企业使用了 毕竟如果某金融企
  • UE4右键菜单(上篇ContentBrowser的补充)

    在上篇中我们讲到拓展我们的ContentBrowser的文件夹右键菜单 看回上篇代码可以发现其实真正起实现拓展 看到效果 的代码就只有一行 在代码中我们可以看到 MenuBuilder 这个东西是可以为我们创建一个菜单的 今天我们继续来改造
  • VOC格式数据集转适用YOLOv8格式

    直接设置VOC数据集的文件夹目录 生成的v8格式数据集存放目录以及标签的名字就行了 直接执行后就会是下面这图这样重新创建一个文件夹存放符合yolov8格式的数据集 yolov8直接加载那个yaml文件就行 我下边只有一类 注意最后的yaml
  • 计算机网络物联网论文,物联网对计算机网络技术发展分析

    摘要 随着科学技术和计算机网络技术的快速发展 物联网行业呈现出了巨大的发展潜力并且不断完善 这几年在物联网概念的强力刺激下 很多的公共服务和商业服务也加入到这一技术的应用当中 计算机网络是构成物联网的基础 所以计算机网络技术的发展和物联网是
  • 前端学习之常见标签的使用(2)

    目录 h标签 p标签 br标签 字符实体 img标签 a标签 mailto链接 base标签 锚点 div span video H5新增 audio H5新增 h标签 h标签 标题标签 在HTML中 一共有六级标题标签 h1 h6 在显示
  • 类的分文件编写

    类的分文件编写 point h 1 在开头加上以下代码 pragma once 防止头文件重复包含 include
  • 【Cadence】virtuoso Layout复制版图链接到新的原理图

    稍微记录一下备忘 需求描述 1 假设cell1中含有schematic1和layout1 2 现复制cell1到cell2 3 修改cell2中的schematic2后 需要相应地修改layout2 4 如果打开layout2 会发现链接到
  • 【操作系统】王道考研 p59-60 减少延迟时间的方法、磁盘的管理

    减少延迟时间的方法 磁盘的管理 以下是减少延迟时间的方法的内容 前情回顾 简而言之 如果要读写逻辑上相邻的盘片会延长时间 因为读写完一个盘片后要处理一段时间 处理完已经转过想要读的下一个盘片了 磁盘地址结构的设计 减少寻道时间的方法 物理地
  • mac上使用IntelliJ IDEA运行项目

    一 Mac OSX系统下安装Tomcat 1 下载Tomcat官方下载地址 2 解压Tomcat到目录 Library 中 并把文件夹名由 apache tomcat 6 0 16 改为 Tomcat 3 打开 应用程序 Applicati
  • vue3 中的 toRefs 是什么? 什么时候用?

    定义 toRefs可以将对象 只能接收rective对象 中的属性变成响应式 正常reactive对象数据也是响应式的 如果用toRefs解构出去会更加方便 什么时候用 数据量如果很多 我们一般会用解构来简化代码 那么在vue3 中如果使用
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter
  • 华为OD机试 - 生日礼物(Java)

    题目描述 小牛的孩子生日快要到了 他打算给孩子买蛋糕和小礼物 蛋糕和小礼物各买一个 他的预算不超过x元 蛋糕cake和小礼物gift都有多种价位的可供选择 请返回小牛共有多少种购买方案 输入描述 第一行表示cake的单价 以逗号分隔 第二行
  • IDEA类和方法的模板注释

    2 1 修改类注释模板 在File gt Settings gt Editor gt File and Code Templates下分别修改Class Interface Enum等注释模板 Class模板部分修改如下 其余的举一反三进行
  • Java字符串左移右移动

    public class MoveTheKnumber public static void main String args String startStr ABCDEF System out println getKnumber lef
  • python plt 绘图详解(plt.版本)

    文章目录 一 plt介绍 二 安装与导入 三 使用说明 1 使用plt plot与plt show绘制并显示图像 1 曲线颜色 color 简写为 c 2 点型 标记marker 3 线型 linestyle 简写为 ls 4 剩余参数说明