前面学习了很多2D的图形绘制,但有时候也需要3D的图形来显示数据,这样会对数据的理解有帮助,当然也不是说所有数据使用3D显示就好过2D,还是需要根据实际情况来分析来2D或者3D。
matplotlib提供的3D数据显示的功能,也是比较强大,一般的数据显示是能够满足的。本文将开始进入3D数据显示功能的学习,如果你不想使用3D显示的功能,可以不必要看下去了。
为了简单起见,先来一个最简单的例子,如下图:
跟2D的情况是一样,先要来学习3D的坐标系,然后才能在里面显示数据。上图就是一个最简单的3D坐标系,它是一个三维投影图,底下面两条是X轴和Y轴, 竖直方向的是Z轴。整个坐标系,可以通过鼠标来移动方向来观察数据。
由于matplotlib做了大量的工作,要显示这个三维的坐标系是非常简单的,只需要几行代码即可,首先要导入三维模块,如下:
from mpl_toolkits import mplot3d
因为需要向函数Figure.add_subplot传送一个参数来建立3D投影的坐标系,这个参数是projection = "3d",要识别这个参数必须导入mplot3d模块,才能使用。否则会提示如下出错:
Traceback (most recent call last):
File "D:\Python37\lib\site-packages\matplotlib\projections\__init__.py", line 58, in get_projection_class
return projection_registry.get_projection_class(projection)
File "D:\Python37\lib\site-packages\matplotlib\projections\__init__.py", line 25, in get_projection_class
return self._all_projection_types[name]
KeyError: '3d'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:/work/Matplotlib/src/plt_058.py", line 10, in <module>
ax = fig.add_subplot(1,1,1, projection = "3d")
File "D:\Python37\lib\site-packages\matplotlib\figure.py", line 1396, in add_subplot
self._process_projection_requirements(*args, **kwargs)
File "D:\Python37\lib\site-packages\matplotlib\figure.py", line 1120, in _process_projection_requirements
projection_class = projections.get_projection_class(projection)
File "D:\Python37\lib\site-packages\matplotlib\projections\__init__.py", line 60, in get_projection_class
raise ValueError("Unknown projection %r" % projection)
ValueError: Unknown projection '3d'
整个演示的例子如下:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection = "3d")
plt.show()
在这个例子里,要注意add_subplot一定要添加三个1,或者“111”,否则是2D坐标系不能进行3D投影。如下:
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')