python数据的三维空间聚会:原来你们都长这样!
开始学习Python编程的中间阶段的最好方法绝对是开始使用Python支持的库。
下面是一些您可以考虑入门学习的顶级库:
NumPy总的来说是用于科学计算的。
SciPy使用数组,例如用于线性代数、微积分和其他类似概念的基本数据结构。
Pandas用于数据帧,而Matplotlib则以图形和符号的形式显示数据。
它通过可视化展现,只是一种抽象概括。从创建前端或图形用户界面(GUI)到将数字化数据绘制为图上的点。
Matplotlib用于在图形上绘制数据点。Matplotlib是一个绘图库,可以用于Python编程语言及其数字化数学扩展库NumPy。它提供了一个面向对象的API,通过使用通用的GUI工具包(如Tkinter、wxPython、Qy或GTK+),将绘图嵌入到应用中。
在Python中有许多用于三维绘图的选项,但这里有一些使用Matplotlib的常见简单方法。
一般来说,第一步是创建一个三维坐标轴,然后绘制出最能说明特定需求的数据的三维图形。为了使用Matplotlib,必须导入Matplotlib安装中包含的mplot3d工具包:
from mpl_toolkits import mplot3d
然后,要创建三维轴,可以执行以下代码:
<pre id="3346" class="graf graf--pre graf-after--p">%matplotlib inline import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = plt.axes(projection=’3d’)</pre>
在这个三维坐标轴中,可以绘制一个图,重要的是要知道哪种类型的图(或图的组合)可以更好地描述数据。
此时,您需要注意的是,这一操作是我们进一步绘图的基础。
点和线:
下图结合了两个绘图,一个图带有一条线,该线穿过数据的每个点,另一个图在本例中的每个特定1000个值上绘制一个点。
这个代码分析时实际上非常简单。我们利用标准三角函数绘制了一组随机值,并利用这些数据生成三维投影。代码如下:
ax = plt.axes(projection=’3d’)# Data for a three-dimensional line zline = np.linspace(0, 15, 1000) xline = np.sin(zline) yline = np.cos(zline) ax.plot3D(xline, yline, zline, ‘gray’)# Data for three-dimensional scattered points zdata = 15 * np.random.random(100) xdata = np.sin(zdata) + 0.1 * np.random.randn(100) ydata = np.cos(zdata) + 0.1 * np.random.randn(100) ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap=’Greens’);
三维等高线图
由于需要二维网格上的数据,因此轮廓图的输入与上一个绘图稍有不同。
请注意,在下面的示例中,在为x和y赋值之后,通过执行“np.meshgrid(x,y)”将它们组合到网格上,然后通过执行函数f(x,y)和网格值(z=f(x,y))创建z值。
再一次,基本的简化三维图为以下代码:
def f(x, y): return np.sin(np.sqrt(x ** 2 + y ** 2)) x = np.linspace(-6, 6, 30) y = np.linspace(-6, 6, 30) X, Y = np.meshgrid(x, y) Z = f(X, Y)fig = plt.figure() ax = plt.axes(projection='3d') ax.contour3D(X, Y, Z, 50, cmap='binary') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z');
在以前的图形中,数据是按顺序生成的,但在现实生活中,有时数据是不按顺序生成的,对于这些情况,三角网格曲面测量非常有用,因为它通过查找相邻点之间形成的三角形集来创建曲面。
表面三角测量:
theta = 2 * np.pi * np.random.random(1000) r = 6 * np.random.random(1000) x = np.ravel(r * np.sin(theta)) y = np.ravel(r * np.cos(theta)) z = f(x, y) ax = plt.axes(projection=’3d’) ax.plot_trisurf(x, y, z,cmap=’viridis’, edgecolor=’none’);