【python VS vba】(8) 在python使用matplotlib库来画图

news2024/9/27 7:20:20

目录

1 matplotlib的基本用法

1.1 需要用到的模块,需要实现安装,且导入

1.2 画布 figure

1.2.1 figure的官方解释

1.2.2  画布语法

1.2.3  必须先获取至少1个figure:

1.2.4 figure的生效范围与多个figure

1.2.5 可以设置多个画布

1.3  设置函数图形

1.4 画图

1.5 显示图像

2 用matplotlib 画函数图形

2.1 在一个画布里画多个图形

(1张画布,1个坐标轴系,多个图形叠在一起)

2.2 在多个画布里,分别画1个图形

(多张画布,多个坐标轴系,分别包含1个图形)

2.3  一个画布里作图多个子图,且按表格排列好

(多张画布,多个坐标轴系,分别包含1个图形,且按内部序号排列)

2.3.1 用plt.subplot()方式绘制多子图

3  关于坐标轴的各种设置

3.1 坐标轴的描述

3.2 坐标轴范围设置

3.3 坐标轴的刻度设置

4 其他图像设置

4.1 设置图形标题

4.2 图片的图例

4.3 显示网格

5 移动坐标轴

5.1 代码

5.2 一个警告,不是报错

5.3 图片的4边,都是spine

5.4 # 隐藏右边、上边的spine

5.5 # 移动两个spine到0,0,达到把坐标轴移动的目的

6 比如  散点图 sactter


1 matplotlib的基本用法

1.1 需要用到的模块,需要实现安装,且导入

1.1.1 导入 import matplotlib.pyplot

import numpy as np
import matplotlib.pyplot as plt 

  • 注意,虽然常用的画图模块是 matplotlib
  • 但是实际上大家常用的 plt 是指 matplotlib.pyplot 这个子模块
  • 错误写法 import matplotlib as plt 会造成报错 TypeError: 'module' object is not callable

1.1.2 matplotlib 词源

matplotlib 推测词源

  • mat:matrix  矩阵,向量组,2维数组等,甚至于 张量tensor
  • plot:绘制
  • lib: library 库

1.2 figure  画图容器/ 画布

1.2.1 figure的官方解释

figure是一顶级的容器,包含了绘图所有的元素。我把这个理解为画布

  • 1.the Figure, which contains all the plot elements.
  • 2.The top level container for all the plot elements.

1.2.2  画布语法

画布语法:fig1=plt.figure(num,figsize)

  • fig1=plt.figure(num=1,figsize=(3,3))
  • fig2=plt.figure()
  1. num=1           编号,实测可省略
  2. figsize=(3,3)   画布大小,实测可省略,有默认值

1.2.3  必须先获取至少1个figure:

  • 需要画图形和现实图形,首先必须需要获取figure才可以
  • fig=plt.figure()
  • 获取figure的方式是:fig = plt.figure()。

1.2.4 多个figure存在时,figure的生效范围

  • 同一段代码可能会存在多个 figure
  • 一个figure到下一个figure语句前之间的区域,属于该figure的作图管辖范围;
  • 而如果没有下一个figure时,则到plt.show()之间的区域,属于该figure的作图管辖范围。
  • 在一个figure的作图管辖范围的图像都会展示在同一个figure绘画弹框中。

1.2.5 因为可以一段代码里存在多个plt.figure(),因此可以设置多个画布

  • 如果需要图像在多个不同的figure弹框中展示,则需要获取多个figure才可以
  • 获取figure的方式是:fig = plt.figure()
  • 设置多个画布的时候以创建 plt.figure() 为分界

1.3  设置函数图形

设置函数的关键:

函数就是形如 y=f(x)的样式,但是函数的作图需要具体的数据。

  • 1 自变量:一组自变量的数,方便作图。如果只是纯粹的函数形式当然抽象的X就够了。
  • 2 因变量:y=f(x)  函数的表达式即可,因为因变量可计算出来
  1. 自变量:x=np.linspace(-5,5, 10)
  2. 因变量:y=x*2+1

1.4 画图/绘图  plt.plot()

  • plt.plot(x, y)
  • plt.plot(x对应自变量:一般对应X轴, y对应因变量:一般对应y轴)

  • # 绘图
  • plt.plot(x, y, color="#ff0000",label="xxx")

1.5 显示图像

  • # 显示图像
  • matplotlib作图,要显示图像,必须调用plt.show(), 否则不显示
  • plt.show()


 

2 用matplotlib 画函数图形

2.1 在一个画布里画多个图形

(1张画布,1个坐标轴系,多个图形叠在一起)

import numpy as np
import matplotlib.pyplot as plt

fig1=plt.figure(num=1)

x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2

# 绘图
plt.plot(x, y)
plt.plot(x, y2)

# 显示图像
plt.show()

2.2 在多个画布里,分别画1个图形

(多张画布,多个坐标轴系,分别包含1个图形)

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-5,5, 10)

fig1=plt.figure(num=1,figsize=(3,3))
y=x*2+1
# 绘图
plt.plot(x, y)

#新开一个画布
fig2=plt.figure(num=2,figsize=(5, 5))
y2=x**2
# 绘图
plt.plot(x, y2)

# 显示图像
plt.show()


 

2.3  一个画布里作图多个子图,且按表格排列好

(多张画布,多个坐标轴系,分别包含1个图形,且按内部序号排列)

2.3.1 用plt.subplot()方式绘制多子图

  • plt.subplot()方式绘制多子图,只需要传入简单几个参数即可:
  • plt.subplot(rows, columns, current_subplot_index)
  • 形如plt.subplot(2, 2, 1),其中:
  1. rows表示最终子图的行数;
  2. columns表示最终子图的列数;
  3. current_subplot_index表示当前子图的索引;
  4. 这几个参数是可以连写在一起的,同样可以被识别
  5. 例如:上面的plt.subplot(2, 2, 1),写成plt.subplot(221),两者是等价的。

import numpy as np
import matplotlib.pyplot as plt

# 子图1,散点图
plt.subplot(2, 2, 1)
plt.scatter(np.linspace(-2, 2, 5), np.random.randn(5))

# 子图2,折线图+网格
plt.subplot(2, 2, 2)
plt.plot(np.linspace(-2, 2, 5), np.random.randn(5))
plt.grid(True)

# 子图3,柱状图
plt.subplot(2, 2, 3)
x = np.linspace(0, 5, 5)
plt.bar(x, np.random.random(5))
plt.xticks(np.arange(0, 6))

# 子图4,饼图
plt.subplot(2, 2, 4)
plt.pie(np.random.random(5), labels=list("ABCDE"))

plt.show()

3  关于坐标轴的各种设置

  • 坐标轴描述
  • 坐标轴范围设置
  • 坐标轴刻度
  • 挪动坐标轴

3.1 坐标轴的描述

  • plt.xlabel("X axis")
  • plt.ylabel("Y axis")

3.2 坐标轴范围设置

  • plt.xlim((-10,10))
  • plt.ylim((-10,10))

3.3 坐标轴的刻度设置

  • # 设置坐标轴刻度
  • plt.xticks([-4, -2, 0, 2, 4])
  • plt.yticks(np.linspace(-10, 10, 10))

  • # 这样可以清除刻度
  • plt.xticks()
  • plt.yticks()

import numpy as np
import matplotlib.pyplot as plt

fig1=plt.figure(num=1)

x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2

# 设置坐标轴描述
plt.xlabel("X axis")
plt.ylabel("Y axis")

# 设置坐标轴范围
plt.xlim((-10,10))
plt.ylim((-10,10))

# 设置坐标轴刻度
plt.xticks([-4, -2, 0, 2, 4])
plt.yticks(np.linspace(-10, 10, 10))
# 这样可以清除刻度 plt.xticks()
# 这样可以清除刻度 plt.yticks()

# 绘图
plt.plot(x, y)
plt.plot(x, y2)

# 显示图像
plt.show()


 

4 其他图像设置

4.1 设置图形标题

plt.title("here is title")

4.2 图片的图例

  • # 显示图例
  • plt.legend()
  • # 显示图例
  • plt.legend(labels=[xx_label, x_label])

4.3 显示网格

# 显示网格
plt.grid(True)

5 移动坐标轴

5.1 代码

import numpy as np
import matplotlib.pyplot as plt

# 移动坐标轴

figure = plt.figure(num=100)

# x,y
x = np.linspace(-4, 4, 50)
y = x ** 2 - 4

# 获取到坐标轴
ax = plt.gca()

# 隐藏右边、上边的spine
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")

# 移动两个spine到0,0,达到把坐标轴移动的目的
ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))

xx_label = r"y = x ^ 2 - 4"
x_label = r"y = x"
plt.title("here is title")

# 绘图
plt.plot(x, y, color="#ff0000",label="xxx")

# 显示图例
plt.legend()

plt.plot(x, x)

# 显示网格
plt.grid(True)

# 显示图例
plt.legend(labels=[xx_label, x_label])

plt.show()

5.2 一个警告,不是报错

No artists with labels found to put in legend. Note that artists whose label

  • # 绘图
  • plt.plot(x, y, color="#ff0000")
  • plt.plot(x, y, color="#ff0000",label="xxx")   #没有这个就会警告 label="xxx"
  • # 显示图例
  • plt.legend(labels=[xx_label, x_label])

#legend相关代码中缺乏label名称的说明,需要给予图例对应的名字
plt.legend(loc=4, bbox_to_anchor=(1.15, -0.07))#原代码报错并不显示图例
plt.legend(loc=4, bbox_to_anchor=(1.15, -0.07),labels=['频次']) # 调整后不报错并显示图例
 

# 添加图例
plt.legend()

# 添加图例
plt.legend(labels=['频次'])
 

5.3 图片的4边,都是spine

图片的4边,都是spine

可以分别操作这4个spine

5.4 # 隐藏右边、上边的spine

# 隐藏右边、上边的spine
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")

5.5 # 移动两个spine到0,0,达到把坐标轴移动的目的

# 移动两个spine到0,0,达到把坐标轴移动的目的
ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))

6 比如  散点图 sactter

import numpy as np
import matplotlib.pyplot as plt

# 散点图
# x, y
x = np.random.normal(0, 1, 20)
y = np.random.normal(0, 1, 20)

# 绘制散点图
plt.scatter(x, y, s=25, alpha=0.75)

plt.xlabel("X")
plt.ylabel("Y")

# 显示图像
plt.show()

7 直方图

import numpy as np
import matplotlib.pyplot as plt


# 直方图

# x, y
size = 12
x = np.arange(size)
y = np.random.uniform(0, 1, size) * 10

# 直方图
plt.bar(x, y, edgecolor="white")
plt.bar(x, -y, facecolor="#999999", edgecolor="white")

# 设置坐标
plt.xticks(x)
plt.yticks(np.linspace(-12, 12, 13))

# 显示数值
for (X, Y) in zip(x, y):
    plt.text(x=X, y=Y+0.2, s="%.1f" % Y, ha="center")
    print(X, Y)

# 显示图像
plt.show()

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

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

相关文章

创业就做轻资产 低门槛高收益的创业项目

1.在创业之前,首先要找对方向 所谓方向就是根据经济环境和市场分析,哪个行业最赚钱,哪个产品市场需求量大,竞争力下,发展前景好,可以实现长期收益。 2.清晰地思考商业摸式,建立盈利循环 例如&…

排序算法(详解)

排序在日常生活中十分重要,购物平台上商品的排序,各国高校等级的排序......可以说,现代生活中已经离不开排序了;因此学好排序算法至关重要,本篇文章就来讲讲常见的排序算法 排序的种类非常多,按照种类划分&…

AI数字人克隆采集规范分享!

数字人直播的时代已经来临,使用青否数字人SaaS系统数字人源码:zhibo175)去生成数字人,那如何能得到自己想要的效果呢?需要注意一下几点: 一.摄影棚灯光方案 中型(15m左右)摄影棚​ 适用于美妆/珠宝等直播&a…

Rust语言抓取在线考试平台的专业试题数据

不管你是学车也好,还是考各类证书,都离不开刷题,有些题库都是需要收费的,而且市面平台那么多,想要刷更多的题只能下载很多不同APP,因此,我写了一个Rust爬取试题的爬虫,将更多的分散的…

从 enable_if 了解模板元编程

前言 在阅读学习 ZLToolKit 源码时&#xff0c;从如下一段代码中了解到 enable_if 和 SFINAE 的概念&#xff0c;从而引入了对模板元编程的了解。 template<class R, class... ArgTypes> class TaskCancelableImp<R(ArgTypes...)> : public TaskCancelable { pub…

PHP基础 - 循环与条件语句

循环语句 1)for循环: 重复执行一个代码块指定的次数。 for ($i = 0; $i < 5; $i++) { // 初始化 $i 为 0,每次循环后将 $i 值增加 1,当 $i 小于 5 时执行循环echo "The number is: $i \n"; // 输出当前 $i 的值并换行 }// 循环输出结果为: // The number …

【一秒梵高】基于OpenCV4实现图像九种风格迁移

风格迁移 图像风格迁移、色彩填充与色彩变换等&#xff0c;严格意义上来说都属于计算机视觉任务中图像处理的分支。它们输入的是图像&#xff0c;输出的也是图像&#xff0c;过程实现图像到图像的内容与风格的转换&#xff0c;深度学习在这类图像处理任务上也取得了良好的效果…

改进了编排控制并增强了推理的可视性,Agents for Amazon Bedrock 现已上市

七月份的时候&#xff0c;我们推出了 Agents for Amazon Bedrock 预览版。如今&#xff0c;Agents for Amazon Bedrock 全面上市。 Agents for Amazon Bedrock 通过编排多步任务&#xff0c;有助于您加速生成人工智能 &#xff08;AI&#xff09; 应用程序的开发。代理使用基础…

【ARM Coresight 系列 2 文章 -- Trace32 对 APBIC 地址的配置 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC RomtableTrace32 RESBREAKTrace32 ENRESETAPBIC Romtable 图 1 APBIC 网络图 如上图所示,如果想通过Trace32/DS-5 去访问 AP, 这个时候需要怎么做呢?可以看到 APBIC 中ROMTABLE 中 APB-AP 的偏移是0x002000…

2023 re:Invent|Amazon Q与Amazon CodeWhisperer面向企业开发者提效利器

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 2023年&#xff0c;以GPT为代表的生成式AI引爆了新一轮技术热潮&#xff0c;短短一年的时…

Jenkins离线安装部署教程简记

前言 在上一篇文章基于Gitee实现Jenkins自动化部署SpringBoot项目中&#xff0c;我们了解了如何完成基于Jenkins实现自动化部署。 对于某些公司服务器来说&#xff0c;是不可以连接外网的&#xff0c;所以笔者专门整理了一篇文章总结一下&#xff0c;如何基于内网直接部署Jen…

【数据结构】栈和队列超详解!(Stack Queue)

文章目录 前言一、栈1、栈的基本概念2、栈的实现&#xff08;数组实现&#xff09;3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、…

排序-归并排序与计数排序

文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度&#xff1a;4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…

车载导航系统UI界面,可视化大屏设计(PS源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享车载导航系统科技风蓝黑简约UI界面、车载系统UI主界面、车载系统科技风UI界面、首页车载系统科技感界面界面的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关…

数据库动态视图和存储过程报表数据管理功能设计

需求&#xff1a;需要将ERP的报表数据挪到OA中&#xff0c;但是OA表单设计不支持存储过程动态传参&#xff0c;所以需要设计一个系统&#xff0c;可以手动配置&#xff0c;动态显示原本ERP的报表数据&#xff0c;ERP报表是存在数据库的视图和存储过程中 思路&#xff1a;因为E…

算法复习——6种排序方法的简单回顾

算法复习——6种排序方法的简单回顾 常见排序方法&#xff1a;冒泡排序、选择排序、插入排序、堆排序、归并排序、快速排序的简单回顾 冒泡排序 重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置” 在冒泡排序中&#xff0c;第 1 轮需要比较 n - 1…

整理b站黑马程序员C++课程中对于计算机视觉学习有所帮助的知识点。(重点用*标出)

文章目录 1、注释2、变量3、常量4、标识符5、整型 浮点型 字符型 字符串 布尔6、输入 输出7、逻辑运算法8、 程序流程结构9、三目运算符10、switch语句11、循环语句12、跳转语句13、*数组13.1一维数组名 14、二维数组15、**函数15.1、函数的调用15.2、函数的声明15.3、函数份文…

Android camera的metadata

一、实现 先看一下metadata内部是什么样子&#xff1a; 可以看出&#xff0c;metadata 内部是一块连续的内存空间。 其内存分布大致可概括为&#xff1a; 区域一 &#xff1a;存 camera_metadata_t 结构体定义&#xff0c;占用内存 96 Byte 区域二 &#xff1a;保留区&#x…

HarmonyOS--基础组件TextInput

TextInput 官方文档 TextInput组件https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textinput-0000001427584864-V3#ZH-CN_TOPIC_0000001523968610__%E5%AD%90%E7%BB%84%E4%BB%B6 文本输入框组件 接口 TextInput(value?:…

【Python】用Python发邮件

准备工作 以新浪邮箱为例&#xff0c;进入账号管理&#xff0c;打开授权码并保存下来 用到的包 import smtplib from email.header import Header from email.mime.text import MIMEText 账号授权码准备 这里用的是前面记录的授权码&#xff0c;不是登录密码哦 email_hostsm…