当前位置: 首页 > article >正文

机器学习--python基础库之Matplotlib (1) 超级详细!!!

机器学习--python基础库Matplotlib

  • 机器学习--python基础库Matplotlib
    • 0 介绍
    • 1 实现基础绘图-某城市温度变化图
      • 1.1绘制基本图像
      • 1.2实现一些其他功能
    • 2 再一个坐标系中绘制多个图像
    • 3 多个坐标系显示-plt.subplots(面向对象的画图方法)
    • 4 折线图的应用场景

机器学习–python基础库Matplotlib

0 介绍

Matplotlib 是 Python 中一个强大且广泛使用的绘图库,由 John D. Hunter 在 2003 年创建,它为
Python 提供了类似于 MATLAB
绘图接口,能帮助用户轻松地创建各种高质量的静态、动画和交互式可视化图形。以下从多个方面对其进行简要介绍: 主要特点
多样化的绘图类型:支持绘制折线图、柱状图、散点图、饼图、直方图、箱线图等多种基本图形,还能创建 3D 图形、等高线图、热力图等复杂图形,满足不同领域的数据可视化需求。

高度可定制性:几乎可以对图形的每个元素进行定制,如线条颜色、样式、宽度,坐标轴标签、刻度、范围,图形标题、图例等,能够根据具体需求创建出具有专业水准的可视化效果。
跨平台兼容性:可以在多种操作系统(如 Windows、Linux、macOS)上使用,并且支持多种后端(如 Tkinter、Qt、GTK
等),方便在不同的开发环境中集成。 与其他库集成良好:能够与 NumPy、Pandas
等科学计算库无缝集成,方便对这些库处理后的数据进行可视化展示。

基本绘图流程
使用 Matplotlib 进行绘图通常遵循以下基本步骤:

  1. 导入库:在 Python 脚本中导入 Matplotlib 的 pyplot 模块,通常使用别名 plt 来简化代码。
python import matplotlib.pyplot as plt 
  1. 准备数据:使用 NumPy 或 Pandas 等库生成或处理要绘制的数据。
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
  1. 创建图形和坐标轴:可以使用 plt.figure() 函数创建一个新的图形窗口,然后使用 plt.plot() 等函数在该图形上绘制具体的图形。
plt.figure(figsize=(8, 6))  # 创建一个大小为 8x6 英寸的图形窗口
plt.plot(x, y)  # 绘制折线图
  1. 设置图形属性:对图形的标题、坐标轴标签、刻度、图例等进行设置,以增强图形的可读性和美观性。
plt.title('Sine Wave')  # 设置图形标题
plt.xlabel('X-axis')  # 设置 x 轴标签
plt.ylabel('Y-axis')  # 设置 y 轴标签 
  1. 显示或保存图形:使用 plt.show() 函数显示图形,或者使用 plt.savefig() 函数将图形保存为文件。
plt.show()  # 显示图形
 #或者保存图形
plt.savefig('sine_wave.png')

1 实现基础绘图-某城市温度变化图

1.1绘制基本图像

# import matplotlib.pyplot as plt
# import random
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 1.创建画布
plt.figure(figsize=(20,8), dpi = 100)
# 2.绘制图像
plt.plot(x, y_shanghai)
# 3.图像显示
plt.show()

在这里插入图片描述

1.2实现一些其他功能

# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False
import matplotlib.pyplot as plt
import random
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 1.创建画布
plt.figure(figsize=(20,8), dpi = 100)
# 2.绘制图像
plt.plot(x, y_shanghai)

# 2.1 添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x] 
y_ticks = range(40)

# 修改x,y轴坐标刻度显示
# plt.xticks(x[::5]) # 从头到尾间隔5个来区分
plt.xticks(x[::5], x_ticks_label[::5]) # 从头到尾间隔5个来区分
# 如果为刻度添加数字,则可以直接添加;但是如果要变成字符串,需要先修改成数字,再用字符串进行替换
plt.yticks(y_ticks[::5])

# 2.2添加网格显示
# True:这是 plt.grid() 函数的第一个参数,用于控制是否显示网格线。当传入 True 时,表示要在图形中显示网格线;如果传入 False,则不会显示网格线。
# linestyle="--":该参数用于设置网格线的样式。linestyle 也可以简写成 ls。"--" 表示网格线将以虚线的形式显示。除了 "--" 之外,matplotlib 还支持其他常见的线条样式,例如:
# "-":实线(默认值)
# ":":点线
# "-.":点划线
# alpha = 0.5:alpha 参数用于设置网格线的透明度。透明度的值范围是从 0.0(完全透明)到 1.0(完全不透明)。这里设置为 0.5 意味着网格线具有 50% 的透明度,这种半透明的效果可以避免网格线过于突出而干扰图形中主要数据的展示
plt.grid(True, linestyle="-.",alpha = 0.5)

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11-12点某城市温度变化", fontsize = 20)

# 2.4 图像保存 
# 注意:plt.show() 会释放figure资源,如果在显示图像之后保存图片将只能保存空的图片
plt.savefig("./test.png")

# 3.图像显示
plt.show()

在这里插入图片描述

2 再一个坐标系中绘制多个图像

import matplotlib.pyplot as plt
import random
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False


# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1.创建画布
plt.figure(figsize=(20,8), dpi = 100)
# 2.绘制图像
plt.plot(x, y_shanghai, color="g", label = "上海") #label是添加图例
plt.plot(x, y_beijing, color="r", linestyle="--",label = "北京")
# 2.1 添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x] 
y_ticks = range(40)

# 修改x,y轴坐标刻度显示
# plt.xticks(x[::5]) # 从头到尾间隔5个来区分
plt.xticks(x[::5], x_ticks_label[::5]) # 从头到尾间隔5个来区分
# 如果为刻度添加数字,则可以直接添加;但是如果要变成字符串,需要先修改成数字,再用字符串进行替换
plt.yticks(y_ticks[::5])

# 2.2添加网格显示
# True:这是 plt.grid() 函数的第一个参数,用于控制是否显示网格线。当传入 True 时,表示要在图形中显示网格线;如果传入 False,则不会显示网格线。
# linestyle="--":该参数用于设置网格线的样式。linestyle 也可以简写成 ls。"--" 表示网格线将以虚线的形式显示。除了 "--" 之外,matplotlib 还支持其他常见的线条样式,例如:
# "-":实线(默认值)
# ":":点线
# "-.":点划线
# alpha = 0.5:alpha 参数用于设置网格线的透明度。透明度的值范围是从 0.0(完全透明)到 1.0(完全不透明)。这里设置为 0.5 意味着网格线具有 50% 的透明度,这种半透明的效果可以避免网格线过于突出而干扰图形中主要数据的展示
plt.grid(True, linestyle="-.",alpha = 0.5)

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11-12点某城市温度变化", fontsize = 20)

# 2.4 图像保存 
# 注意:plt.show() 会释放figure资源,如果在显示图像之后保存图片将只能保存空的图片
plt.savefig("./test.png")

# 2.5 显示图例
#它的作用是让 matplotlib 自动选择一个最佳的位置来放置图例,使得图例不会与图形中的数据发生重叠
plt.legend(loc="best")

# 3.图像显示
plt.show()

在这里插入图片描述

3 多个坐标系显示-plt.subplots(面向对象的画图方法)

import matplotlib.pyplot as plt
import random
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False


# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 1.创建画布
#plt.figure(figsize=(20,8), dpi = 100)
fig, axes = plt.subplots(nrows = 1, ncols = 2, figsize=(20,8), dpi = 100)

# 2.绘制图像
# plt.plot(x, y_shanghai, color="g", label = "上海") #label是添加图例
# plt.plot(x, y_beijing, color="r", linestyle="--",label = "北京")
axes[0].plot(x, y_shanghai, color="g", label = "上海") #label是添加图例
axes[1].plot(x, y_beijing, color="r", linestyle="--",label = "北京")

# 2.1 添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x] 
y_ticks = range(40)

# 修改x,y轴坐标刻度显示
# plt.xticks(x[::5]) # 从头到尾间隔5个来区分
# plt.xticks(x[::5], x_ticks_label[::5]) 
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])

axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])


# # 2.2添加网格显示
# # True:这是 plt.grid() 函数的第一个参数,用于控制是否显示网格线。当传入 True 时,表示要在图形中显示网格线;如果传入 False,则不会显示网格线。
# # linestyle="--":该参数用于设置网格线的样式。linestyle 也可以简写成 ls。"--" 表示网格线将以虚线的形式显示。除了 "--" 之外,matplotlib 还支持其他常见的线条样式,例如:
# # "-":实线(默认值)
# # ":":点线
# # "-.":点划线
# # alpha = 0.5:alpha 参数用于设置网格线的透明度。透明度的值范围是从 0.0(完全透明)到 1.0(完全不透明)。这里设置为 0.5 意味着网格线具有 50% 的透明度,这种半透明的效果可以避免网格线过于突出而干扰图形中主要数据的展示
# plt.grid(True, linestyle="-.",alpha = 0.5)
axes[0].grid(True, linestyle="--", alpha = 1)
axes[1].grid(True, linestyle="--", alpha = 1)


# # 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11-12点某城市温度变化", fontsize = 20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11-12点某城市温度变化", fontsize = 20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11-12点某城市温度变化", fontsize = 20)

# 2.4 图像保存 
# # 注意:plt.show() 会释放figure资源,如果在显示图像之后保存图片将只能保存空的图片
plt.savefig("./test.png")

# # 2.5 显示图例
# #它的作用是让 matplotlib 自动选择一个最佳的位置来放置图例,使得图例不会与图形中的数据发生重叠
# plt.legend(loc="best")
axes[0].legend(loc="best")
axes[1].legend(loc="best")

# 3.图像显示
plt.show()

在这里插入图片描述

4 折线图的应用场景

import numpy as np
# 0.准备数据
x = np.linspace(-10,10,1000) # 从-10到10准备1000个数
y = np.sin(x)

# 1.创建画布
plt.figure(figsize = (20, 8), dpi = 100)

# 2.绘制函数图像
plt.plot(x, y)

# 2.1 添加网格显示
plt.plot()

# 显示图像
plt.show()

在这里插入图片描述

该图像是y = sin(x)

更多相关学习资料请参考https://matplotlib.org/index.html


http://www.kler.cn/a/534400.html

相关文章:

  • 算法:线性同余法(LCG,Linear Congruential Generator)
  • Python爬虫:1药城店铺爬虫(完整代码)
  • JavaScript系列(57)--工程化实践详解
  • 84-《金银花》
  • 如何不更新application.yml而更新spring的配置
  • 【PyQt】getattr动态访问对象的属性
  • 现场流不稳定,EasyCVR视频融合平台如何解决RTSP拉流不能播放的问题?
  • Python|Pyppeteer实现链接并打开比特浏览器进行自动化操作(31)
  • 说一下Kafka你是怎么进行配置的?例如生产者配置和消费者配置
  • 一款wordpress AI免费插件自动内容生成+前端AI交互+文章批量采集
  • Spring @Lazy:延迟初始化,为应用减负
  • 【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
  • 【Elasticsearch】geohex grid聚合
  • 洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解
  • 基于springboot的在线BLOG博客网
  • Flask+gevent 实现异步请求处理
  • 【高阶数据结构(一)】:LRU Cache
  • 【Day 30 LeetCode】动态规划DP
  • 苹果再度砍掉AR眼镜项目?AR真的是伪风口吗?
  • UE制作2d游戏
  • 《AI重塑网络开发:用户界面设计的革新之路》
  • 【分布式架构理论3】分布式调用(2):API 网关分析
  • ACK One 如何通过 GitOps DevOps 实现高效 CI/CD 流水线?
  • 深度学习-100-RAG技术之最简单的RAG系统概念和效果优化提升方向
  • (2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调
  • 旋钮屏设备物联网方案,ESP32-C3无线通信应用,助力设备智能化升级