Python 之 Matplotlib 第一个绘图程序和基本方法

news2024/10/3 10:40:19

文章目录

  • 一、第一个 Matplotlib 绘图程序
    • 1. Matplotlib 绘图的基本步骤
  • 二、Matplotlib 的基本方法
    • 1. 图表名称 plt.title()
    • 2. x 轴和 y 轴名称
    • 3. 设置 x 轴和 y 轴的刻度
    • 4. 显示图表 show()
    • 5. 图例 legend()
    • 6. 图例的图例位置设置
    • 7. 显示每条数据的值 x,y 值的位置

一、第一个 Matplotlib 绘图程序

  • 与 NumPy 类似,我们可以使用相同的方法查看 Matplotlib 的版本信息。
import matplotlib
matplotlib.__version__
#'2.2.3'

1. Matplotlib 绘图的基本步骤

  • (1) 首先导入 Matplotlib 包中的 Pyplot 模块,并以 as 别名的形式简化引入包的名称。
from matplotlib import pyplot as plt
#import matplotlib.pyplot as plt
  • (2) 接下来,使用 NumPy 提供的函数 arange() 创建一组数据来绘制图像。
  • 引入 numpy 包,我们获取 -50 到 50 之间的 ndarray 对象(由于 arange() 不含终止值,因此,我们需要到 51)。
import numpy as np
x = np.arange(-50,51)
x
#array([-50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38,
#       -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25,
#       -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12,
#       -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,
#         2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
#        15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
#        28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
#        41,  42,  43,  44,  45,  46,  47,  48,  49,  50])
  • (3) 上述所得 x 的值作用到 x 轴上,而该值对应的平方值,也就是 y 值,使用以下方式获取。
y = x **2
y
#array([2500, 2401, 2304, 2209, 2116, 2025, 1936, 1849, 1764, 1681, 1600,
#       1521, 1444, 1369, 1296, 1225, 1156, 1089, 1024,  961,  900,  841,
#        784,  729,  676,  625,  576,  529,  484,  441,  400,  361,  324,
#        289,  256,  225,  196,  169,  144,  121,  100,   81,   64,   49,
#         36,   25,   16,    9,    4,    1,    0,    1,    4,    9,   16,
#         25,   36,   49,   64,   81,  100,  121,  144,  169,  196,  225,
#        256,  289,  324,  361,  400,  441,  484,  529,  576,  625,  676,
#        729,  784,  841,  900,  961, 1024, 1089, 1156, 1225, 1296, 1369,
#       1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304,
#       2401, 2500], dtype=int32)
  • (4) 使用 plt 的 plot() 函数对 x、y 进行绘制。
plt.plot(x,y)

在这里插入图片描述

二、Matplotlib 的基本方法

方法名说明
title()设置图表的名称
xlabel()设置x轴名称
ylabel()设置y轴名称
xticks(ticks,label,rotation)设置x轴的刻度,rotation旋转角度
yticks()设置y轴的刻度
show()显示图表
legend()显示图例
text(x,y,text)显示每条数据的值 x,y值的位置

1. 图表名称 plt.title()

  • x 轴获得 -50 到 50 之间的 ndarray 对象(由于 arange() 不含终止值,因此,我们需要到 51),y 轴的值是 x 轴的平方。
  • 然后,我们将图表的名称设置为 y= x^2,最后绘制图形即可。
import numpy as np
x = np.arange(-50,51)
y = x **2
plt.title("y= x^2")
plt.plot(x,y)

在这里插入图片描述

  • 那么,我们是否可以将标题写为中文呢?
plt.title("y等于x的平方-")
plt.plot(x,y)

在这里插入图片描述

  • 会发现图表标题跟我们想象中的不太一样,这是因为默认不支持中文:missing from current font 字体丢失造成的。
  • 因此,我们可以通过如下代码修改字体配置。
plt.rcParams["font.sans-serif"]
  • 字体说明详见下表。
中文字体说明
‘SimHei’中文黑体
‘Kaiti’中文楷体
‘LiSu’中文隶书
‘FangSong’中文仿宋
‘YouYuan’中文幼圆
STSong华文宋体
  • 我们可以使用我们需要的中文信息进行图表标题的临时配置,就可以成功完成我们的需求了。
plt.rcParams['font.sans-serif'] = ["FangSong"]
plt.title("y等于x的平方--")
plt.plot(x,y)

在这里插入图片描述

  • 这里我们需要注意的是,在字体设置的过程中,字体名称是不区别大小写的。
  • 因此,我们在尝试下别的字体。
plt.rcParams['font.sans-serif'] = ["SimHei"]
plt.title("y等于x的平方")
plt.plot(x,y)

在这里插入图片描述

  • 但是通过上述的图表当中,我们又会发现,当我们设置了中文字体后,坐标轴的负数又没办法正确显示了。
  • 对此,我们可以创建 x 为 -10 到 10 的整数,y 是 x 的平方。
import numpy as np
x = np.arange(-10,11)
y = x ** 2
plt.plot(x, y)

在这里插入图片描述

  • 这里我们需要注意的是,当我们的字体设置支持中文后,必须设置负号,否则当数值中出现负值时,负号就无法正常显示。
  • 对此,我们可以通过修改坐标轴中的负号编码进行解决。我们可以创建 x 为 -10 到 10 的整数,y 是 x 的平方,并设置标题,用以对比观察。
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(-10,11)
y = x ** 2
plt.title('y=x^2 x取值范围为:[-10,10)')
plt.plot(x, y)

在这里插入图片描述

  • 对上述的字体问题进行总结可得:如果我们想要在标题当中显示中文,就需要修改 2 个配置信息:
  • (1) plt.rcParams[‘font.sans-serif’]=[‘SimHei’] ,用来设置字体样式以正常显示中文标签。
  • (2) plt.rcParams[‘axes.unicode_minus’]=False ,默认是使用 Unicode 负号,设置正常显示字符。

2. x 轴和 y 轴名称

  • x 轴的名称通过 xlabel() 进行设置。
  • y 轴的名称通过 ylabel() 进行设置。
  • 对此,我们创建一个 x 为 -10 到 10 的整数,y 是 x 的平方的数组,并将其标题设置为 y=x^2 x取值范围为:[-10,10),将 x 轴的名称设置为 x 轴,y 轴的名称设置为 y 轴。
x = np.arange(-10,10)
y = x ** 2
plt.title('y=x^2 x取值范围为:[-10,10)')
plt.xlabel("x 轴")
plt.ylabel("y 轴")
​plt.plot(x, y)

在这里插入图片描述

  • 对于上面的图,如果我们觉得字体偏小或线条太细,可以设置标签文字大小和线条粗细。
  • (1) 通过 fontsize 参数,设置文字大小。
  • (2) 通过 linewidth 参数,设置线条粗细。
  • 为了便于与上述图表当中的字体和线条进行比对,我们便创建与上述完全相同的数组(一个 x 为 10 到 10 的整数,y 是 x 的平方的数组,并将其标题设置为 y=x^2 x取值范围为:[-10,10),将 x 轴的名称设置为 x 轴,y 轴的名称设置为 y 轴),并使用 fontsize 参数将文字大小设置为 12,使用 linewidth 参数将线条宽度设置为 5。
x = np.arange(-10,10)
y = x ** 2
plt.title('y=x^2 x取值范围为:[-10,10)',fontsize=16)
plt.xlabel("x 轴",fontsize=12)
plt.ylabel("y 轴")
plt.plot(x, y,linewidth=5)

在这里插入图片描述

  • 我们也可以在一个图表当中,设置两种线条宽度。
plt.plot(x, y,linewidth=1)
plt.plot(x, y,linewidth=5)

在这里插入图片描述

  • 运行结束上面代码后,除了线条变化外,我们发现可以在一张图片中绘制多个线条。
  • 对此,我们创建一个 x 为 10 到 10 的整数,y1 是 x 的平方的数组,y2 就等于 x,并将其标题设置为 y=x^2 x取值范围为:[-10,10),同时,标题的文字大小设置为 16,将 x 轴的名称设置为 x 轴,使用 fontsize 参数将文字大小设置为 12,y 轴的名称设置为 y 轴。
x = np.arange(-10,11)
y1 = x ** 2
y2 = x
plt.title('y=x^2 x取值范围为:[-10,10)',fontsize=16)
plt.xlabel("x 轴",fontsize=12)
plt.ylabel("y 轴")
plt.plot(x, y1)
plt.plot(x, y2)

在这里插入图片描述

3. 设置 x 轴和 y 轴的刻度

  • 我们可以通过 matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs) 设置 x 轴的刻度。
  • 我们可以通过 matplotlib.pyplot.yticks(ticks=None, labels=None, **kwargs) 设置 y 轴的刻度。
  • 其中参数具有如下含义:
  • ticks:此参数是 xtick 位置的列表,是一个可选参数。如果将一个空列表作为参数传递,则它将删除所有 xticks。
  • label:此参数包含放置在给定刻度线位置的标签,它是一个可选参数。
  • **kwargs:此参数是文本属性,用于控制标签的外观,例如:
  • rotation 表示旋转角度,例如:rotation=45。
  • color表示颜色,例如:color=“red”。
  • 那么,xticks 到底有什么用呢?
  • 其实就是把坐标轴变成我们想要的样子。
  • 例如,我们将 x 轴设置为时间,y 轴设置为销量,x 轴具体数据使用 np.arange() 生成,y 轴具体数据使用 np.random.randint() 生成。
times = np.arange(1990,2020).astype(np.str_)
sales = np.random.randint(500,2000,size=len(times))
plt.xticks(range(0,len(times),2),['%s年'%i for i in times],rotation=45)
plt.plot(times,sales)

在这里插入图片描述
上述图表,就是每个时间点的销量绘图,如果 x 轴的数据是字符串,那么就会将数据全部展示(y 轴销售量数据仍通过 np.random.randint() 生成)。

times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
sales =np.random.randint(500,2000,size=len(times))
plt.plot(times,sales)

在这里插入图片描述

  • 显而易见,在上述图形当中,x 轴存在一个问题。
  • 如果我们只想显示部分时间,或者按照某个规则展示,应该如何处理呢?
  • 这个时候我们就需要用到 xticks。
plt.xticks(range(0,len(times),2))
plt.plot(times,sales)

在这里插入图片描述

  • 通过设置,时间虽然少了,但是如果我们可以让横坐标中的字体倾斜,就可以避免 x 轴坐标刻度重叠。而其中,xticks 第一个参数中元素的值,代表原始数据的索引。
plt.xticks(range(0,len(times),2),labels=['日期:%s'%i for i in times], rotation=45, color='red')
plt.plot(times,sales)

在这里插入图片描述

4. 显示图表 show()

  • show() 可以用来显示所有打开的图形。
  • 在 jupyter notebooks 当中,会自动显示图形。
  • 如果我们想在 jupyter 中出现图形操作菜单,可以使用 matplotlib 中的魔术方法 %matplotlib notebook 即可。
%matplotlib notebook
  • 之后在运行图表生成代码就会得到如下结果。
plt.xticks(range(1,len(times),2),rotation=45)
plt.plot(times,sales)

在这里插入图片描述

  • 如果我们想要返回原先的展示,,用另一个 matplotlib 中的魔术方法 %matplotlib inline 即可。
%matplotlib inline
plt.xticks(range(1,len(times),2),rotation=45)
plt.plot(times,sales)

在这里插入图片描述

5. 图例 legend()

  • 图例 legend() 是集中于地图一角或一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图。

在这里插入图片描述

  • 对此,我们以上述数组为例,进行图例的设置,一个是收入,另一个是支出,均通过 np.random.randint() 进行数据的生成。
  • 需要注意的是,在使用图例前需要为每个图形设置 label 参数,默认会使用每个图形的 label 值作为图例中的说明。
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
income =np.random.randint(500,2000,size=len(times))
expenses =np.random.randint(300,1500,size=len(times))
plt.xticks(range(1,len(times),2),rotation=45)
plt.plot(times,income,label="收入")
plt.plot(times,expenses,label="支出")
plt.legend()

在这里插入图片描述

6. 图例的图例位置设置

  • loc 代表了图例在整个坐标轴平面中的位置(一般选取 ‘best’ 这个参数值)。
  • 第一种情况默认是 “best”,图例自动‘安家’在一个坐标面内的数据图表最少的位置。
  • 第二种情况 loc = ‘XXX’ 分别有 0:‘best’ (自动寻找最好的位置)。
位置字符串位置值备注
“best”0自动寻找最好的位置
“upper right”1右上角
“upper left”2左上角
“lower left”3左下角
“lower right”4右下角
“right”5右边中间
“center left”6左边中间
“center right”7右边中间
“lower center”8中间最下面
“upper center”9中间最上面
“center”10正中心
  • 对此,我们以上述数组为例,进行图例的设置,一个是收入,另一个是支出,均通过 np.random.randint() 进行数据的生成。
  • 需要注意的是,在使用图例前需要为每个图形设置 label 参数,默认会使用每个图形的 label 值作为图例中的说明。
  • 我们将图例放到整体的左上角。
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
​income =np.random.randint(500,2000,size=len(times))
expenses =np.random.randint(300,1500,size=len(times))
​plt.xticks(range(1,len(times),2),rotation=45)
plt.plot(times,income,label="收入")
plt.plot(times,expenses,label="支出")
plt.legend(loc="upper left")

在这里插入图片描述

7. 显示每条数据的值 x,y 值的位置

  • 通过如下代码进行实现。
plt.text(x,y,  string,  fontsize=15,  verticalalignment="top",  horizontalalignment="right")
  • 其中参数具有如下含义:
  • x,y 表示的是坐标值上的值。
  • string 表示说明文字。
  • fontsize 表示字体大小。
  • verticalalignment:(va)垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]。
  • horizontalalignment:(ha)水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]。
  • 对此,我们以上述数组为例,进行图例的设置,一个是收入,另一个是支出,均通过 np.random.randint() 进行数据的生成。
  • 需要注意的是,在使用图例前需要为每个图形设置 label 参数,默认会使用每个图形的 label 值作为图例中的说明,图例放到整体的左上角。
  • 将每个数据的 y 值(也就是收入和支出)显示出来。
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
​income =np.random.randint(500,2000,size=len(times))
expenses =np.random.randint(300,1500,size=len(times))
​plt.xticks(range(1,len(times),2),rotation=45)
plt.plot(times,income,label="收入")
plt.plot(times,expenses,label="支出")
plt.legend(loc="upper left")
for x,y in zip(times,income):
    plt.text(x,y,'%s万'%y)

在这里插入图片描述

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

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

相关文章

LeetCode 61. 旋转链表

原题链接 难度:middle\color{orange}{middle}middle 题目描述 给你一个链表的头节点 headheadhead ,旋转链表,将链表每个节点向右移动 kkk 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1…

wafw00f源码及流量特征分析

wafw00f介绍 这不是本次的重点,相关介绍及使用方法相信大家已经了解,所以此处就直接引用其开发者对该工具的介绍。 To do its magic, WAFW00F does the following: Sends a normal HTTP request and analyses the response; this identifies a number o…

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:划分子网的IPv4地址(1)划分子网思想(2)子网掩码A:概述B:例子C:默…

Django 模型继承问题

文章目录Django 模型继承问题继承出现的情况Meta 和多表继承Meta 和多表继承继承与反向关系指定父类连接字段代理模型QuerySet 仍会返回请求的模型基类约束代理模型管理器代理继承和未托管的模型间的区别多重继承不能用字段名 "hiding"在一个包中管理模型Django 模型…

linux安装极狐gitlab

1. 官网寻找安装方式 不管我们使用任何软件,最靠谱的方式就是查看官方文档。gitlab提供了相应的安装文档,并且有对应的中文文档。地址如下: https://gitlab.cn/install/ 我在这里以CentOS作为安装示例,大家可根据自己的需要选择…

LabVIEW中ActiveX控件、ActiveX服务器和类型库注册

LabVIEW中ActiveX控件、ActiveX服务器和类型库注册如何在计算机上手动注册ActiveX控件(.ocx )、ActiveX服务器(.DLL和.EXE)以及类型库(.TLB )?在LabVIEW中打开ActiveX控件或类的引用时&#xff…

XCP实战系列介绍12-基于Vector_Davinci工具的XCP配置介绍(一)

本文框架 1.概述2. EcuC配置2.1 Pdu添加步骤2.2 配置项说明3. Can 模块配置4. CanIf 模块配置4.1 接收帧的Hardware Receive Object配置4.2 接收帧和发送帧的Pdu配置1.概述 在文章《看了就会的XCP协议介绍》中详细介绍了XCP的协议,在《XCP实战系列介绍01-测量与标定底层逻辑》…

ELK分布式日志收集快速入门-(二)kafka进阶-快速安装可视化管理界面-(单节点部署)

目录安装前准备安装中安装成功安装前准备 安装kafka-参考博客 (10条消息) ELK分布式日志收集快速入门-(一)-kafka单体篇_康世行的博客-CSDN博客 安装zk 参考博客 (10条消息) 快速搭建-分布式远程调用框架搭建-dubbozookperspringboot demo 演示_康世行的…

Python编程 动态爱心

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.所用库 1.random简介 2.math 简介 3.tkinter库的简介 二.实际图 三.…

OKR之剑·实战篇06:OKR致胜法宝-氛围业绩双轮驱动(下)

作者:vivo 互联网平台产品研发团队 本文是《OKR 之剑》系列之实战第 6 篇—— 本文介绍团队营造氛围的方法与实践、在业绩方面的探索与输出,在两方面分别总结了一些经验分享给大家。 一、我们营造氛围的方法与实践 先说说氛围。组织氛围的提出者库尔…

10分钟学会数据库压力测试,你敢信?

目录 前言 查看数据库版本 下载驱动: 菜单路径 配置 Variable Name Bound to Pool模块配置 Connection pool configuration模块配置 Database Connection Configuration模块配置 菜单路径 Variable Name Bound to Pool 脚本结构 脚本(执行查询…

2.3 IS-IS认证

2.2.3 实验三:IS-IS认证 1. 实验目的  实现IS-IS接口认证 实现IS-IS区域认证实验IS-IS路由域认证2. 实验拓扑 IS-IS认证的实验拓扑如图2-6 图2-6:IS-IS认证 3. 实验步骤 配置IP地址(此处略…

让ChatGPT做当年的高考现代文阅读

最近ChatGPT火出天际,我突发奇想,如果用ChatGPT来做高考现代文阅读会怎样。 于是找到了当年非常火的一篇文章,叫《一种美味》,这个名字大家可能不太熟,但是提到其中一句话,你可能立马就想起来了。 「眼里…

一些NLP术语

一些NLP术语pre-training(预训练)fine-tuning(微调)下游任务Few-shot Learning(少样本学习)Prompt?(自然语言提示信息)二级标题三级标题pre-training(预训练&…

Redis第一讲

目录 一、Redis01 1.1 NoSql 1.1.1 NoSql介绍 1.1.2 NoSql起源 1.1.3 NoSql的使用 1.2 常见NoSql数据库介绍 1.3 Redis简介 1.3.1 Redis介绍 1.3.2 Redis数据结构的多样性 1.3.3 Redis应用场景 1.4 Redis安装、配置以及使用 1.4.1 Redis安装的两种方式 1.4.2 Redi…

字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪15k,拿到offer

我今年25岁,专业是电子信息工程本科,19年年末的时候去面试,统一投了测试的岗位,软件硬件都有,那时候面试的两家公司都是做培训的,当初没啥钱,他们以面试为谎言再推荐去培训这点让我特别难受。 …

关于APP下载量提升的技巧

关于APP应用下载量提升,很多人都不是很了解。今天厦门巨神峰小编给大家说下关于APP下载量提升的几个技巧。 一、抓住流行趋势,提升APP下载量 1、利用社交媒体进行推广。社交媒体是当下最流行的推广手段,可以有效的将APP的消息传播到更多的用…

物联网对网页设计和开发的影响

当下从汽车、工业设备、家用电器到安全系统,越来越多的设备已经都连接到了互联网。与此同时,物联网在网页开发方面也有一些重大发展。因企业对于物联网应用需求不断增长,促使更多开发人员和设计人员从事物联网应用的开发和设计。下面我们将带…

Gotify消息推送系统搭建

昨天网友 sincoslong 提到了一个很好的建议: docker 注册表版本别选择 latest 选择具体版本号。 有的新版本,数据库、 php 各种依赖,都升级。小白如果选择最近更新的版本,估计写个 blog 都是记录如何失败的。 虽然有的人也会看…

STM32单片机超声波模块测距

OLED液晶接口电路图超声波模块接口电路图STM32单片机超声波模块测距程序源代码#include "sys.h"#define OLED_RST_Clr() PCout(13)0 //RST#define OLED_RST_Set() PCout(13)1 //RST#define OLED_RS_Clr() PBout(4)0 //DC#define OLED_RS_Set() PBout(4)1 //DC#define…