您的位置:

Python数据可视化利器:Matplotlib库的用法

数据可视化已经成为了现代数据科学家和工程师的重要工作之一。Matplotlib是一个优秀的数据可视化库,它支持众多的绘图类型,包括线图,散点图,柱状图,等高线图,和复杂的3D图形。Matplotlib库的设计目标是兼容MATLAB语法,这使得它成为科学计算中最受欢迎的绘图库之一。

一、基础绘图

Matplotlib最基础的绘图是线图。下面的代码演示如何使用Matplotlib绘制线图。


import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 10, 1000)
y = np.sin(x)

# 绘图
plt.plot(x, y, label='sin(x)')

# 显示标签
plt.legend()

# 显示图形
plt.show()

下面是代码的说明:

首先,我们从numpy库导入linspace函数和sin函数,用来生成X轴和Y轴的数据。然后,我们从matplotlib.pyplot库导入pyplot模块,用来绘制图形。接下来,使用plot函数绘制线图。plot函数的第一个参数是X轴数据,第二个参数是Y轴数据。label='sin(x)'表示为图像标注注释。如果有多个曲线需要绘画,则使用subplot函数,其中第一个参数为nrows,第二个参数为ncols,第三个参数为plot_number,表示在其中的哪一个窗口中进行绘图。

此外,使用legend函数可以显示图例。最后,使用show函数显示图形。运行这个程序,就会看到一幅含有一个正弦函数的线图。

二、2D图形和子图

除了线图,Matplotlib还支持各种2D图形。在Matplotlib中,使用subplot函数可以绘制多个子图。


x = np.linspace(-10, 10, 1000)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 在一张图中绘制三个子图
plt.subplot(3, 1, 1)
plt.plot(x, y1)
plt.title('sin(x)')

plt.subplot(3, 1, 2)
plt.plot(x, y2)
plt.title('cos(x)')

plt.subplot(3, 1, 3)
plt.plot(x, y3)
plt.title('tan(x)')

plt.show()

上面的代码中,我们生成三个不同的曲线,并使用subplot函数生成了一个显示三个子图的绘图窗口。subplot函数的第一个参数是行数,第二个参数是列数,第三个参数是子图的位置。运行此代码,可以得到如下图像:

![subplot images](https://img-blog.csdn.net/20170214113744336?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZF9kaWdpdGFsbF9yZW1lZGlh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)

三、散点图与直方图

另一个流行的二维图形类型是散点图。散点图可以用于表示两个变量之间的相关性。Matplotlib的scatter函数可以用于绘制散点图。


# 构造数据
x = np.random.randn(1000)
y = np.random.randn(1000)

plt.scatter(x, y, c='r', alpha=0.5)
plt.show()

上面的代码使用了Matplotlib的scatter函数绘制散点图。其中x和y都是由随机值填充的向量。color参数设置点的颜色,alpha参数设置透明度。运行此代码,可以得到如下的散点图:

![Scatter plot](https://img-blog.csdn.net/20170214114220051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZF9kaWdpdGFsbF9yZW1lZGlh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)

另外,直方图是最适合描述一组连续性数据的图形。Matplotlib的hist函数可以用于绘制直方图。


# 构造数据
x = np.random.randn(1000)

# 绘图
plt.hist(x, bins=50, color='g')

plt.show()

在上面的代码中,我们使用hist函数绘制直方图。其中,bins参数指定直方图的梯形数量,颜色是可以变化的。该代码将生成如下的直方图。

![Histogram](https://img-blog.csdn.net/20170214114348909?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZF9kaWdpdGFsbF9yZW1lZGlh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)

四、3D图形

除了2D图形,Matplotlib库还支持各种3D图形。我们可以使用Axes3D对象来绘制立体图形。下面的代码演示如何使用Matplotlib绘制3D散点图。


from mpl_toolkits.mplot3d import Axes3D

# 生成3D数据
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)

# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='b', marker='o')

plt.show()

在上面的代码中,我们使用Axes3D对象创建3D图形,scatter函数用于绘制散点。marker参数指定点的形状,颜色也可以变化。该代码将生成如下的3D散点图。

![3D scatter plot](https://img-blog.csdn.net/20170214114504781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZF9kaWdpdGFsbF9yZW1lZGlh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)