python3-matplotlib基本使用(以折线图为例)

1、什么是matplotlib

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
Matplotlib 是 Python 中类似 MATLAB 的绘图工具。MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
matplotlib 支持的图形 https://matplotlib.org/stable/gallery/index.html

2、基础使用(以下都以折线图为例)

from matplotlib import pyplot as plt  # 绘图导入 pyplot 一般会重命名为plt
# 展示每隔两个小时的温度变化
x = range(2,26,2)  # [2,4,6,8 ... ,22,24]
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
# 绘图
plt.plot(x,y)
# 展示图形
plt.show()

在这里插入图片描述
上面图片存在的问题:

  • 图片的大小(想要高清大图)
  • 保存到本地
  • 描述信息,比如x,y轴表示什么
  • 调整刻度的间距
  • 线条的样式(颜色、透明度)
  • 标记出特殊的点(比如最高点,最低点)
  • 给图片加水印,防伪

3、设置图片宽高、分辨率、xy轴刻度、保存图片到本地

from matplotlib import pyplot as plt  # 绘图导入 pyplot 一般会重命名为plt# 展示每隔两个小时的温度变化
x = range(2,26,2)  # [2,4,6,8 ... ,22,24]
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]"""
figure 指的是我们画的图
figsize 宽 高
dpi 没英寸多少个点,点多了,放大后不会模糊,有锯齿形
"""
plt.figure(figsize=(20, 8), dpi=80)# 绘图
plt.plot(x,y)# 设置x轴刻度
# plt.xticks(x)
xticks_lables = [i/2 for i in range(4, 49)]
# plt.xticks(xticks_lables)
plt.xticks(xticks_lables[::3])  # 太密集了,可以每三个取一个
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1))
# 设置刻度颜色,设置刻度倾斜等 参考 https://blog.csdn.net/Poul_henry/article/details/82590392# 保存
# plt.savefig("./sig_size.png")
# plt.savefig("./sig_size.svg")  # 可以保存为svg矢量图格式,放大不会有锯齿# 展示图形
plt.show()

在这里插入图片描述

4、X,y轴显示字符串并旋转显示

显示10点到12点每分钟气温变化

from matplotlib import pyplot as plt
import randomx = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]plt.figure(figsize=(15, 8), dpi=80)plt.plot(x,y)# 调整x 轴的刻度
xtick_lables = ["10:{}".format(i) for i in range(60)]
xtick_lables += ["11:{}".format(i) for i in range(60)]# plt.xticks(list(x)[::3], xtick_lables[::3],rotation=270)  # rotation 旋转的度数
plt.xticks(list(x)[::3], xtick_lables[::3],rotation=60)  # rotation 旋转的度数yticks_lables = ["{}tem".format(i) for i in range(15, 40, 2)]
plt.yticks(range(15, 40, 2), yticks_lables,rotation=60)plt.show()

在这里插入图片描述

5、X,y轴显示中文并设置字体大小

如果不设置,中文不能正常显示
针对Windows ,字体存放位置 C:\Windows\Fonts
linux/mac可以参考: https://www.bilibili.com/video/BV1hx411d7jb?p=6
也可以参考: https://www.runoob.com/numpy/numpy-matplotlib.html

from matplotlib import pyplot as plt
import random
from matplotlib import font_managermy_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\SIMLI.TTF", size=12)x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]plt.figure(figsize=(15, 8), dpi=80)plt.plot(x,y)# 调整x 轴的刻度
xtick_lables = ["10:{}".format(i) for i in range(60)]
xtick_lables += ["11:{}".format(i) for i in range(60)]# plt.xticks(list(x)[::3], xtick_lables[::3],rotation=270)  # rotation 旋转的度数
plt.xticks(list(x)[::3], xtick_lables[::3],rotation=60)  # rotation 旋转的度数yticks_lables = ["{}度".format(i) for i in range(15, 40, 2)]
plt.yticks(range(15, 40, 2), yticks_lables,rotation=60,fontproperties=my_font)plt.show()

在这里插入图片描述

6、设置XY轴和标题的描述信息并绘制网格

from matplotlib import pyplot as plt
import random
from matplotlib import font_managermy_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\SIMLI.TTF", size=12)x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]plt.figure(figsize=(15, 8), dpi=80)plt.plot(x,y)# 调整x 轴的刻度
xtick_lables = ["10:{}".format(i) for i in range(60)]
xtick_lables += ["11:{}".format(i) for i in range(60)]# plt.xticks(list(x)[::3], xtick_lables[::3],rotation=270)  # rotation 旋转的度数
plt.xticks(list(x)[::3], xtick_lables[::3],rotation=60)  # rotation 旋转的度数yticks_lables = ["{}度".format(i) for i in range(15, 40, 2)]
plt.yticks(range(15, 40, 2), yticks_lables,rotation=60,fontproperties=my_font)# 添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度 单位(℃)",fontproperties=my_font)
plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)# 绘制网格
plt.grid(alpha=0.9)  # alpha 可以调整透明度,数值越大越清晰plt.show()

在这里插入图片描述

7、同时绘制出两条折线并添加图例、设置折线颜色,折线样式

from matplotlib import pyplot as plt
from matplotlib import font_manager"""
a 是自己  b 是同桌
x 轴是年龄  y 轴是女朋友的数量
"""
a = [1,0,2,1,5,2,3,6,9,5,1,2,3,1,2,3,2,1,2,1]
b = [1,3,1,1,2,1,1,1,4,4,4,2,2,2,4,1,1,4,1,2]x = range(11, 31)my_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\SIMLI.TTF", size=12)# 设置图形大小
plt.figure(figsize=(15, 8), dpi=80)# plot 增加 label 和 plt.legend() 可以显示tuli
# plot 增加 color 可以修改 线条颜色
# linestyle  线条风格  linestyle 也适用于绘制网格
# - 实线  -- 虚线  -. 点划线  : 点虚线  "" 留空或者空格无线条
# linewidth  线条粗细
# alpha  透明度
plt.plot(x, a, label="自己", color="orange", linestyle="--", linewidth=3, alpha=0.3)
plt.plot(x, b, label="同桌", color="#FF69B4", linestyle="-.",linewidth=6, alpha=0.6)# 设置x刻度
xtick_labels = ["{}岁".format(i) for i in x]
plt.xticks(x, xtick_labels, fontproperties=my_font)
plt.yticks(range(0,11))# 绘制网格 linestyle 也适用于绘制网格
plt.grid(alpha=0.6, linestyle="--")# 添加图例  prop 显示中文,只有这里是 prop其他地方都是 fontproperties
# loc="upper left" 参数可以修改 图例位置 默认是右上
plt.legend(prop=my_font,loc="upper left")plt.show()

在这里插入图片描述

8、标记最高(低)点,添加水印

其他 图像添加image水印、图像添加背景 可 参考 https://zhuanlan.zhihu.com/p/390880393

from matplotlib import pyplot as plt
from matplotlib import font_manager"""
a 是自己  b 是同桌
x 轴是年龄  y 轴是女朋友的数量
"""
a = [1,0,2,1,5,2,3,6,9,5,1,2,3,1,2,3,2,1,2,1]
b = [1,3,1,1,2,1,1,1,4,4,4,2,2,2,4,1,1,4,1,2]x = range(11, 31)my_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\SIMLI.TTF", size=12)# 设置图形大小
plt.figure(figsize=(15, 8), dpi=80)# plot 增加 label 和 plt.legend() 可以显示tuli
# plot 增加 color 可以修改 线条颜色
# linestyle  线条风格  linestyle 也适用于绘制网格
# - 实线  -- 虚线  -. 点划线  : 点虚线  "" 留空或者空格无线条
# linewidth  线条粗细
# alpha  透明度
plt.plot(x, a, label="自己", color="orange", linestyle="--", linewidth=3, alpha=0.3)
plt.plot(x, b, label="同桌", color="#FF69B4", linestyle="-.",linewidth=6, alpha=0.6)# 设置x刻度
xtick_labels = ["{}岁".format(i) for i in x]
plt.xticks(x, xtick_labels, fontproperties=my_font)
plt.yticks(range(0,11))# 标价最高点, 标记最高点;注意:x轴和y轴的索引必须相对应
# mark表示圆圈标记,edgecolors表示圆圈的颜色,s表示标记点的大小
# plt.scatter(x[8], a[8], color='b')
plt.scatter(x[8], a[8], color='b', marker='o', edgecolors='r', s=300)# 添加文本水印  其他 图像添加image水印 图像添加背景 可 参考 https://zhuanlan.zhihu.com/p/390880393
plt.text(x=15,  #文本x轴坐标y=5,  #文本y轴坐标s='hello world',  #文本内容rotation=15,  #文字旋转角度ha='center',  #x=2.2是文字的左端位置,可选'center', 'right', 'left'va='center',  #y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'alpha=0.5,fontdict=dict(fontsize=32,color='grey',family='monospace',  #字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'weight='light',  #磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black')  #字体属性设置
)# 绘制网格 linestyle 也适用于绘制网格
plt.grid(alpha=0.6, linestyle="--")# 添加图例  prop 显示中文,只有这里是 prop其他地方都是 fontproperties
# loc="upper left" 参数可以修改 图例位置 默认是右上
plt.legend(prop=my_font,loc="upper left")plt.show()

在这里插入图片描述

https://www.bilibili.com/video/BV1hx411d7jb?p=3
https://www.bilibili.com/video/BV1hx411d7jb?p=4
https://www.bilibili.com/video/BV1hx411d7jb?p=5
https://www.bilibili.com/video/BV1hx411d7jb?p=6 设置中文显示
https://www.bilibili.com/video/BV1hx411d7jb?p=7
https://www.bilibili.com/video/BV1hx411d7jb?p=8

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

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

相关文章

flowable 开源项目

企业级工作流引擎开源项目 文章目录一、工作流引擎flowable1. flowable2. cims3. RuoYi-flowable4. springboot-flowable-modeler5. flowable-diagram二、工作流引擎activiti2.1. RuoYi-Vue-Process2.2. RuoYi-Process2.3. ruoyi-vue-activiti2.4. activiti7-workflow2.5. JeeS…

看!闲鱼在ServiceMesh的探索和实践

背景: 在阿里服务端开发以Java为主的大背景下,其他异构语言业务如何调用现有Java服务,如何与集团中间件打通,就成为使用非Java语言团队必须要解决的首要问题。 已有方案问题: 在ServiceMesh方案成熟之前&#xff0c…

编译错误 错误:PL/SQL: ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER 行

文章目录1. 现象2. 分析3. 解决方案通过存储过程将临时B表中的数据同步到轨迹表中 1. 现象 PROCEDURE LABS.ASSET_LOANP 编译错误错误:PL/SQL: ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER 行:17 文本:(select n.*, trunc(DBMS_R…

如何保证 HBase 服务的高可用?看看这份 HBase 可用性分析与高可用实践吧!

来源 | 阿丸笔记责编 | Carol头图 | CSDN 下载自视觉中国HBase作为一个分布式存储的数据库,它是如何保证可用性的呢?对于分布式系统的CAP问题,它是如何权衡的呢?最重要的是,我们在生产实践中,又应该如何保证…

python3-matplotlib绘制散点图、绘制条形图

matplotlib 支持的图形 https://matplotlib.org/stable/gallery/index.html 1、绘制散点图 from matplotlib import pyplot as plt from matplotlib import font_manager# y_3是三月每天的最高温度 y_10 是十月每天的最高温度 y_3 [11,17,16,11,12,11,12,6,6,7,8,9,12,…

ORA-01858: 在要求输入数字处找到非数字字符 13行

文章目录1. 现象2. 分析3. 解决方案ORA-01858: 在要求输入数字处找到非数字字符13行 1. 现象 insert /*append*/ into ASSET_LOAN(select * from ASSET_LOANB );commit;2. 分析 由于ASSET_LOANB表和ASSET_LOAN表字段顺序不一致导致的 具体分析:由于ASSET_LOANB表倒数…

牛!Python 全栈必备的 150 个实战案例,一次性获得!

Python 全栈将是你升职加薪的硬通货。我见过很多的 Python 讲解教程和书籍,它们大都这样讲 Python 的:先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, tuple 等数据结构,然后再介绍字符…

数据权限实现

权限框架可以根据用户所属角色决定有权限看到的菜单资源权限。 同一个资源下的同一个菜单的数据权限需要单独处理。 案例:一部门的张三和二部门的李四都是普通用户角色,普通用户都有用户管理的查询权限,但是,一部门的张三只能看到…

遍地开花的 Attention ,你真的懂吗?

阿里妹导读:曾被 paper 中各种各样的 Attentioin 搞得晕晕乎乎,尽管零零散散地整理过一些关于Attention 的笔记,重点和线索依然比较凌乱。今天,阿里巴巴工程师楠易,将 Attentioin 的知识系统性地梳理、回顾、总结&…

Wrapper+map实现页面显示

文章目录1. 查询用户数据map集合2. map集合参数拼装1. 查询用户数据map集合 2. map集合参数拼装 用户角色和部门名称,根据角色ID和部门id分别查询替换,简言之:需要的内容分别通过单独查询数据库得到,然后通过遍历依次对比&#xf…

手淘促活那些事儿 | 智能投放算法框架助力用户增长

导读:本文主要介绍以手淘促活为目的的全链路智能投放算法框架,该框架目前接入以 Pagani 为核心的全链路运营平台,首先使用用户意图识别算法圈选出目标人群,然后借助物料智能推荐和权益动态面额等算法实现全链路上用户的个性化触达…

天天用Redis,持久化方案你又知道哪些?

来源 |码猿技术专栏责编 | Carol头图 | CSDN 下载自视觉中国Redis目前已经成为主流的内存数据库了,但是大部分人仅仅是停留在会用的阶段,你真的了解Redis内部的工作原理吗?今天这篇文章将为大家介绍Redis持久化的两种方案,文章将会…

万万没想到,JVM内存结构的面试题可以问的这么难?

在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么,请大家尝试着回答一下以下问题: 1、JVM管理的内存结构是怎样的? 2、不同的虚拟机在实现运行时内存的…

Serverless 落地挑战与蚂蚁金服实践

目前 Serverless 已成为云原生社区关注的重点之一,有人说它是微服务的继承者,将会彻底改变软件研发的现状,那么真实情况如何呢?本文将介绍 Serverless 市场观察、落地挑战,以及蚂蚁金服对 Serverless 的实践。 Server…

程序员感叹一年只能存下15万太少了……网友:潸然泪下

最近有程序员网友晒出自己的年终奖,税后高达15.7万!看到这个情形,很多网友表示自己“被打鸡血了”。他强调学习的重要性,学习仍然是在这个时代下,普通人能够逆袭,给家人更好生活的一把利器!今天…

机器学习工程师第一年的12点体会

机器学习和数据科学都是广义上的术语,它们涉及超级多的领域以及知识,一位数据科学家所做的事情可能与另一位有很大的不同,机器学习工程师也是如此。通常使用过去(数据)来理解或预测(构建模型)未…

今天下午三点,2020深圳开放数据应用创新大赛将举行第二场线上推介会

4月27日15:00 - 16:30,网易客户端、ZAKER、华为云、南方 plus、虎牙在线直播每场线上推介会设两轮抽奖,欢迎互动。继4月20日首场线上推介会顺利举行后,4月27日下午,以"数聚粤港澳,智汇大湾区"为主题的"…

解决Another app is currently holding the yum lock; waiting for it to exit...问题

在下载安装lrzsz时出现Another app is currently holding the yum lock; waiting for it to exit...问题yum被锁定了可以使用 rm -rf /var/run/yum.pid 强制杀死进程来解决

优化 Tengine HTTPS 握手时间

背景 网络延迟是网络上的主要性能瓶颈之一。在最坏的情况下,客户端打开一个链接需要DNS查询(1个 RTT),TCP握手(1个 RTT),TLS 握手(2个RTT),以及最后的 HTTP …

揭秘!如何用Flutter设计一个100%准确的埋点框架?

阿里妹导读:用户行为埋点是用来记录用户在操作时的一系列行为,也是业务做判断的核心数据依据,如果缺失或者不准确将会给业务带来不可恢复的损失。闲鱼将业务代码从Native迁移到Flutter上过程中,发现原先Native体系上的埋点方案无法…