Matplotlib教程及主要功能用法大全
由ypyu创建,最终由small_q 被浏览 78 用户
matplotlib 是一个 Python 编程语言和其数值数学扩展包 NumPy 的绘图库。它提供了各种绘图工具,使得开发者可以绘制各种静态、动态、交互式的可视化图表。
为什么要用matplotlib?
- 灵活性:matplotlib 提供了广泛的图表类型和样式选项,使得用户可以根据需要定制图表的每一个细节。无论是简单的线图、柱状图,还是复杂的等高线图、3D图,matplotlib 都能轻松应对。
- 易用性:尽管 matplotlib 功能强大,但它的 API 设计相对直观,容易上手。而且,它与 Python 和 NumPy 完美集成,使得数据处理和图表绘制可以无缝衔接。
- 交互性:matplotlib 支持多种交互式图表,使得用户可以更直观地探索和解释数据。虽然它的默认模式是静态图表,但也可以与各种 GUI 工具包(如 Tkinter、wxPython、Qt 等)结合使用,创建交互式应用程序。
- 兼容性:matplotlib 可以在各种操作系统上运行,包括 Windows、macOS 和 Linux。此外,它生成的图表可以保存为多种格式,如 PNG、PDF、SVG 等,方便用户在不同场合使用。
- 社区支持:matplotlib 是一个开源项目,拥有庞大的用户群体和活跃的开发者社区。这意味着用户可以轻松获取帮助,同时也可以参与到项目的开发和改进中。
- 与其他库的集成:matplotlib 可以与许多其他 Python 数据科学库无缝集成,如 Pandas、SciPy、Seaborn 等。这使得用户可以在一个统一的环境中完成数据处理、分析和可视化的全部工作。
matplotlib安装教程
MacOS
打开 Terminal 窗口, 输入以下内容
# python 3+ 请复制以下在 terminal 中执行
$ pip3 install matplotlib
# python 2+ 请复制以下在 terminal 中执行
$ pip install matplotlib
Windows
- 确保你有安装 Visual Studio;
- 去这个网址: https://pypi.python.org/pypi/matplotlib/
- 找到一个适合你自己 python 版本的 wheel (.whl) 文件. (如下图)
matplotlib-1.5.3-cp35-cp35m-win32.whl (md5)
1.5.3 : plt版本
cp35 : python 版本
win32 : Windows 32位系统
whl : wheel 文件
-
用 CMD 找到这个 .whl 文件目录, 然后 pip 安装. 以
matplotlib-1.4.3-cp35-none-win32.whl
文件为例:$ cd python_work # 用 cd 去到你下载的文件目录
如果是 python 3+ 版本, 像下面一样
python_work$ python -m pip3 install matplotlib-1.4.3-cp35-none-win32.whl
如何使用matplotlib包
以下教程将会详细演示matplotlib常用功能用法示例
导入包
import matplotlib.pyplot as plt
import numpy as np
画一个正弦
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x))
plt.show()
#范围0-2*np.pi,50个元素
画二个数据集
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x),
x, np.sin(2 * x))
plt.show()
画自定义图形
当在同一个图形上展示多个数据集时,通过改变线条的外观来区分不同的数据集变得非常必要。
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'r-o',
x, np.cos(x), 'g--')
plt.show()
上述教程代码展示了两种不同的曲线样式:'r-o'
和'g--'
。字母 'r' 和 'g' 代表线条的颜色,后面的符号代表线和点标记的类型。
查询更多颜色请点击官方教程:
markers - Matplotlib 2.2.2 documentationmatplotlib.org
子图
在调用plot()
函数之前需要先调用subplot()
函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。
x = np.linspace(0, 2 * np.pi, 50)
plt.subplot(2, 1, 1)
plt.plot(x, np.sin(x), 'r')
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x), 'g')
plt.show()
散点图
调用scatter()函数并传入两个分别代表 x 坐标和 y 坐标的数组。
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.scatter(x,y)
plt.show()
彩色散点图
同前面一样我们用到了scatter()
函数,但是这次我们传入了另外的两个参数,分别为所绘点的大小和颜色。通过这种方式使得图上点的大小和颜色根据数据的大小产生变化。
x = np.random.rand(1000)
y = np.random.rand(1000)
size = np.random.rand(1000) * 50
colour = np.random.rand(1000)
plt.scatter(x, y, size, colour)
plt.colorbar()
plt.show()
直方图
hist()
函数传入一个包含数据的数组。第二个参数代表数据容器的个数。数据容器代表不同的值的间隔,并用来包含我们的数据。数据容器越多,图形上的数据条就越多。
x = np.random.randn(1000)
plt.hist(x, 50)
plt.show()
柱状图
n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 2.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 2.0, n)
plt.bar(X, +Y1)
plt.bar(X, -Y2)
plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-2, 2)
plt.yticks(())
plt.show()
等高线图
数据集即三维点 (x,y) 和对应的高度值,共有256个点。高度值使用一个 height functionf(x,y)
生成。 x, y 分别是在区间 [-3,3] 中均匀分布的256个值,并用meshgrid
在二维平面中将每一个x和每一个y分别对应起来,编织成栅格:
使用函数plt.contourf
把颜色加进去,位置参数分别为:X, Y, f(X,Y)。透明度0.9,并将 f(X,Y) 的值对应到color map的暖色组中寻找对应颜色。
使用plt.contour
函数划线。位置参数为:X, Y, f(X,Y)。颜色选黑色,线条宽度选0.7。现在的结果如下图所示,只有颜色和线条,还没有数值Label:
def f(x,y):
return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X,Y = np.meshgrid(x, y)
plt.contourf(X, Y, f(X, Y), 8, alpha=0.9, cmap=plt.cm.hot)
C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=0.7)
# 显示图形
plt.show()
3D数据
要先导入一个专用的包,然后要定义一个图像窗口,在窗口上添加3D坐标轴。
接下来给进 X 和 Y 值,并将 X 和 Y 编织成栅格。每一个(X, Y)点对应的高度值我们用下面这个函数来计算。
做出一个三维曲面,然后用colormap rainbow
填充颜色。
from mpl_toolkits.mplot3d import Axes3D # 导入3D坐标轴支持
# 创建一个图像窗口
fig = plt.figure()
# 在窗口上添加3D坐标轴
ax = fig.add_subplot(111, projection='3d')
# 生成X和Y的数据
X = np.arange(-4, 4, 0.1)
Y = np.arange(-4, 4, 0.1)
# 将X和Y编织成栅格
X, Y = np.meshgrid(X, Y)
# 计算每个点的半径
R = np.sqrt(X**2 + Y**2)
# 用函数计算Z值
Z = np.sin(R)
# 绘制三维曲面,并使用彩虹色填充
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
# 显示图形
plt.show()
标题,标签和图例
在plot()
函数中添加命名参数'label'
并赋予该参数相应的标签,然后调用legend()
函数。
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
plt.legend()
plt.xlabel('Rads')
plt.ylabel('Amplitude')
plt.title('Sin and Cos Waves')
plt.show()
图中图
使用plt.figure
创建一个图像窗口.
和之前matplotlib教程一样,使用plt.subplot
来创建小图.plt.subplot(2,2,1)
表示将整个图像窗口分为2行2列, 当前位置为1. 使用plt.plot([0,1],[0,1])
在第1个位置创建一个小图.
plt.subplot(2,2,2)
表示将整个图像窗口分为2行2列, 当前位置为2. 使用plt.plot([0,1],[0,2])
在第2个位置创建一个小图.
plt.subplot(2,2,3)
表示将整个图像窗口分为2行2列,当前位置为3.plt.subplot(2,2,3)
可以简写成plt.subplot(223)
, matplotlib同样可以识别. 使用plt.plot([0,1],[0,3])
在第3个位置创建一个小图.
plt.subplot(224)
表示将整个图像窗口分为2行2列, 当前位置为4. 使用plt.plot([0,1],[0,4])
在第4个位置创建一个小图.
plt.figure()
plt.subplot(2,2,1)
plt.plot([0,1],[0,1])
plt.subplot(2,2,2)
plt.plot([0,1],[0,2])
plt.subplot(223)
plt.plot([0,1],[0,3])
plt.subplot(224)
plt.plot([0,1],[0,4])
plt.show()
多图混合
plt.figure(figsize=(8,8))
x=[1,2,3,4]
y=[2,3,4,5]
y1=[6,7,8,9]
plt.subplot(2,2,1)
plt.plot(x,y)
plt.subplot(2,2,2)
plt.bar(x,y1)
plt.subplot(2,1,2)
plt.pie(y1)
在此感谢莫烦老师的matplotlib教程视频带给我的知识!
总的来说,matplotlib 是一个功能强大、灵活易用、兼容性好的 Python 绘图库,适用于各种数据可视化需求。无论是在科学研究、工程分析还是商业报告中,matplotlib 都是一个值得信赖的工具。