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