Python数据可视化利器:Matplotlib全解析
matplotlib介绍
Matplotlib 是 Python 中最流行的数据可视化库之一,广泛用于生成高质量的静态、动态和交互式图表。它提供了类似 MATLAB 的绘图接口,支持多种图表类型,包括折线图、散点图、柱状图、等高线图和 3D 图形等。
matplotlib核心组成
- Figure:画布,所有图表元素的容器。
- Axes:坐标系,包含坐标轴、标签、标题等,用于绘制具体图表。
- Axis:坐标轴,控制刻度、标签和网格线。
- Artist:所有可见元素的基类,如文本、线条、图像等
matplotlib安装方法
通过 pip 安装最新版本:
pip install matplotlib
常用图表类型
- 折线图:
plt.plot()
- 散点图:
plt.scatter()
- 柱状图:
plt.bar()
- 直方图:
plt.hist()
- 饼图:
plt.pie()
高级功能
- 子图布局:通过
plt.subplots()
创建多子图。 - 样式定制:使用
plt.style.use()
切换预定义样式(如ggplot
、seaborn
)。 - 3D 绘图:导入
mpl_toolkits.mplot3d
模块绘制三维图形。
功能方法
折现图
import matplotlib.pyplot as plt
import numpy as np# 设置字体为 SimHei(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = Falsex = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])plt.plot(x, y)
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
plt.title('折线图示例')
plt.show()
输出
注意如果我们图中有文字的话,要加一段代码
# 设置字体为 SimHei(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
不然文字可能会无法显示
散点图
import matplotlib.pyplot as plt
import numpy as np# 设置字体为 SimHei(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = Falsex = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])plt.scatter(x,y)
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
plt.title('散点图实例')
plt.show()
输出
plt.subplots()
方法
import matplotlib.pyplot as plt
import numpy as np# 创建2x2子图布局
fig, axs = plt.subplots(2, 2, figsize=(10, 8)) # figsize控制画布大小
x = np.linspace(0, 10, 100)# 在每个子图绘制不同图像
axs[0, 0].plot(x, np.sin(x)) # 第一行第一列
axs[0, 0].set_title('Sine Wave')
axs[0, 1].scatter(x, np.cos(x), color='red') # 第一行第二列
axs[1, 0].bar([1, 2, 3], [3, 7, 2]) # 第二行第一列
axs[1, 1].pie([15, 30, 45], labels=['A', 'B', 'C']) # 第二行第二列plt.tight_layout() # 自动调整子图间距
plt.show()
上面,我们一个画布上展现了四张图片,并且其中包含了饼图,柱形图,散点图,线图。并且还展示了如歌调换颜色。
3D图像
import numpy as np
import matplotlib.pyplot as plt# 生成随机数据
np.random.seed(42)
n = 100
x = np.random.rand(n) * 10
y = np.random.rand(n) * 5
z = np.sin(x) + np.cos(y) + np.random.normal(0, 0.2, n)# 创建3D图形
fig = plt.figure(figsize=(10, 8))
fig = plt.axes(projection="3d")# 绘制散点图(颜色映射和大小渐变)
scatter = fig.scatter(x, y, z, c=z, cmap='viridis', s=50*(z-z.min()+1), alpha=0.8)# 添加颜色条# 设置标签和标题
fig.set(xlabel='X Axis', ylabel='Y Axis', zlabel='Z Axis',title='3D Scatter Plot with Color Gradient')
plt.show()
这样我们就完成了一个3d图像的绘制