Python进阶—Matplotlib

1. Matplotlib简介

Matplotlib是Python中重要的可视化库之一,其灵活性和丰富的绘图选项被广泛应用于各种领域,如科学研究、数据分析、工程设计等。该库提供了多种图表类型,如线图、散点图、直方图、饼图等。在本篇文章中,我们将重点介绍Matplotlib的基本绘图功能和常用功能扩展。

2. 绘制折线图

2.1 基本折线图

折线图是Matplotlib中最常用的图形之一,主要用于表示趋势变化和数据的连续性。下面我们来看一个基本的折线图绘制过程:

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = np.arange(0, 2*np.pi, 0.1)

y = np.sin(x)

# 绘制折线图

plt.plot(x, y)

# 设置图像属性

plt.title('Sin Wave') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.show()

通过上述代码,我们可以得到一张简单的正弦函数的折线图。其中,通过plot()函数将x和y的数据进行连接,得到折线图,title()xlabel()ylabel()分别用于设置图像标题、X轴标题和Y轴标题,grid()用于显示网格线。

2.2 多条线绘制

由于折线图的主要目的是表示变化趋势,往往需要绘制多条线来进行比较。下面我们来看一下如何绘制多条线:

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = np.arange(0, 2*np.pi, 0.1)

y1 = np.sin(x)

y2 = np.cos(x)

# 绘制多条折线

plt.plot(x, y1, label='sin')

plt.plot(x, y2, label='cos')

# 设置图像属性

plt.title('Sin/Cos Wave') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.legend() # 显示图示

plt.show()

上述代码中,我们通过plot()函数绘制了两条曲线,分别表示正弦函数和余弦函数,通过label参数为每一条曲线加上名称,legend()函数则用于显示图示。

3. 绘制散点图

散点图主要用于表示两组变量之间的相关关系,常用于统计分析、数据处理等领域。下面我们来看一下如何绘制基本的散点图:

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = np.random.randn(100)

y = np.random.randn(100)

# 绘制散点图

plt.scatter(x, y)

# 设置图像属性

plt.title('Scatter Plot') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.show()

上述代码中,我们通过scatter()函数绘制了随机生成的100个点的散点图。

4. 绘制柱状图

柱状图经常用于比较数据的大小或者不同类别之间的数据分布。下面我们来看一下如何绘制基本的柱状图:

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = ['A', 'B', 'C', 'D', 'E']

y = np.random.randint(1, 10, 5)

# 绘制柱状图

plt.bar(x, y)

# 设置图像属性

plt.title('Bar Plot') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.show()

上述代码中,我们通过bar()函数绘制了随机生成的5个柱状图。

4.1 水平柱状图

有时候,我们需要绘制水平方向的柱状图,此时可以调用barh()函数代替bar()函数。

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = ['A', 'B', 'C', 'D', 'E']

y = np.random.randint(1, 10, 5)

# 绘制水平柱状图

plt.barh(x, y)

# 设置图像属性

plt.title('Horizontal Bar Plot') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.show()

4.2 多组柱状图

多组柱状图常用于比较不同组之间的数据分布。

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = ['A', 'B', 'C', 'D', 'E']

y1 = np.random.randint(1, 10, 5)

y2 = np.random.randint(1, 10, 5)

# 绘制多组柱状图

width = 0.35

plt.bar(x, y1, width=width, label='Group 1')

plt.bar(x+width, y2, width=width, label='Group 2')

# 设置图像属性

plt.title('Multiple Bar Plot') # 图像标题

plt.xlabel('X') # X轴标题

plt.ylabel('Y') # Y轴标题

plt.grid(True) # 显示网格线

plt.legend() # 显示图示

plt.show()

对于多组柱状图,我们需要通过设置宽度width,对不同的柱进行区分,并通过label参数设置图例。

5. 绘制子图

在Matplotlib中,我们可以通过subplot()函数来实现多个图像在同一画布上展示。

import matplotlib.pyplot as plt

import numpy as np

# 数据准备

x = np.arange(0, 2*np.pi, 0.1)

y1 = np.sin(x)

y2 = np.cos(x)

# 绘制子图1

plt.subplot(2, 1, 1) # 2行1列,第1个图像

plt.plot(x, y1)

plt.title('Sin Wave')

# 绘制子图2

plt.subplot(2, 1, 2) # 2行1列,第2个图像

plt.plot(x, y2)

plt.title('Cos Wave')

# 设置图像属性

plt.show()

通过subplot()函数,我们可以设置多行、多列的子图。

6. 绘制3D图像

除了基本的2D图像外,Matplotlib还支持3D图像的绘制。

import matplotlib.pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

# 数据准备

x = np.arange(-5, 5, 0.25)

y = np.arange(-5, 5, 0.25)

x, y = np.meshgrid(x, y)

r = np.sqrt(x**2 + y**2)

z = np.sin(r)

# 绘制3D图像

fig = plt.figure()

ax = Axes3D(fig)

ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow')

# 设置图像属性

plt.title('3D Surface Plot') # 图像标题

plt.show()

通过Axes3D()函数创建一个3D坐标系,调用plot_surface()函数绘制3D图像,并通过参数设置色彩映射等属性。

7. 总结

本文主要介绍了Matplotlib库的基本绘图功能,包括折线图、散点图、柱状图、子图、3D图像等,这些图形展示了Matplotlib库在科学研究、数据分析、工程设计等领域的广泛应用。需要注意的是,Matplotlib还有更丰富的图形类型和绘图选项,需要进一步学习和掌握。

后端开发标签