📅  最后修改于: 2023-12-03 15:23:11.628000             🧑  作者: Mango
在Jupyter Notebook中,我们可以使用Matplotlib和一些其它库来制作3D交互式绘图。下面,我们将介绍如何使用这些工具创建令人惊叹的可视化效果。
在开始之前,我们需要确保安装了必要的库。在Jupyter Notebook中,最好使用conda或pip来安装这些库。打开一个终端或命令提示符并输入下面的命令:
conda install matplotlib numpy pandas ipywidgets
或者
pip install matplotlib numpy pandas ipywidgets
其中,ipywidgets
是实现交互性的关键库。
我们从一个简单的例子开始:制作一个3D散点图来显示两个变量之间的关系。下面是代码:
%matplotlib widget
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
在这个例子中,我们使用numpy
库生成了100个随机点,并使用matlplotlib
库的scatter
方法将它们绘制成了一个3D散点图。我们还设置了轴标签,以及打开了交互模式(首行的%matplotlib widget
命令)。
你应该可以在Notebook中看到一个3D散点图,并且使用鼠标进行旋转和缩放。
3D表面图是另一种流行的可视化效果,可以帮助我们更好地理解数据之间的关系。下面是一个示例代码:
%matplotlib widget
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y = np.mgrid[-5:5:50j, -5:5:50j]
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z, cmap='viridis')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
在这个例子中,我们使用numpy
库的mgrid
函数生成了一个二维的网格,然后使用matplotlib
的plot_surface
方法将网格渲染成一个3D表面图。我们还使用viridis
颜色映射来着色。
我们还可以通过添加滑块和按钮等小部件来增加交互性。下面是一个例子,其使用ipywidgets
库创建了一个滑块,当更改滑块值时,图表将实时更新:
%matplotlib widget
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import ipywidgets as widgets
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y = np.mgrid[-5:5:50j, -5:5:50j]
z = np.sin(np.sqrt(x**2 + y**2) * np.pi)
surface = ax.plot_surface(x, y, z, cmap='viridis')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
slider = widgets.FloatSlider(min=0, max=1, step=0.01, value=1)
def update_plot(value):
z = np.sin(np.sqrt(x**2 + y**2) * np.pi * value)
surface.set_array(z.ravel())
fig.canvas.draw_idle()
widgets.interact(update_plot, value=slider)
plt.show()
我们首先创建了一个FloatSlider
小部件,并定义了一个回调函数update_plot
。当回调函数被调用时,它将计算出一个新的z
数组,并将其设置为3D表面图的高度(通过set_array
方法),然后重新绘制图表(通过draw_idle
方法)。
最后,我们使用ipywidgets
的interact
函数将回调函数绑定到滑块上,实现了交互效果。
在本文中,我们介绍了如何在Jupyter Notebook中使用Matplotlib和其他库创建3D交互式绘图。我们了解了如何制作3D散点图和3D表面图,并演示了如何增加交互性。希望这些示例能帮助你更好地理解这些工具的用法,并在未来的项目中发挥作用。