使用matplotlib画3d平面风场_使用Matplotlib轻松介绍3D绘图

每位数据科学家都应该知道如何创建有效的数据可视化。如果没有可视化,你就会在试图处理数字和想象成千上万的数据点中陷入困境,!

除此之外,它还是与非技术业务利益相关者进行有效沟通的重要工具,他们可以通过图片而不仅仅是单词更容易地理解您的结果。

大多数数据可视化教程都展示了相同的基本内容:散点图,直线图,箱形图,条形图和热图。这些都非常适合快速、高水平地了解数据集。

但是,如果我们更进一步,那该怎么办呢?2D图只能显示单对轴x - y之间的关系;3D图可以让我们探索3对轴的关系:x - yx - zy - z

在本文中,我将简单介绍使用Matplotlib进行3D数据可视化。最后,您将能够将3D绘图添加到数据科学工具包中!

3D散点图和直线图

Matplotlib中的3D绘图首先启用实用工具集。我们可以通过导入mplot3d库来启用此工具包,该库通过pip安装标准的Matplotlib。请确保您的Matplotlib版本超过1.0。

导入该子模块后,可以通过将关键字projection="3d"传递给Matplotlib中的任何常规轴创建函数来创建3D图:

from mpl_toolkits import mplot3dimport numpy as npimport matplotlib.pyplot as pltfig = plt.figure()ax = plt.axes(projection="3d")plt.show()
1732a4788861a093353abd1041ac4d84.png
2752fc0c8945562ad819b6af57203fb2.png

现在我们已经创建了坐标轴,我们可以开始绘制3D图了。3D绘图函数非常直观:而不是分散scatter3D ,而是传递xyz的数据。所有其他函数设置(如颜色和线型)与2D绘图功能保持相同。

这是绘制3D线和3D点的示例。

fig = plt.figure()ax = plt.axes(projection="3d")z_line = np.linspace(0, 15, 1000)x_line = np.cos(z_line)y_line = np.sin(z_line)ax.plot3D(x_line, y_line, z_line, 'gray')z_points = 15 * np.random.random(100)x_points = np.cos(z_points) + 0.1 * np.random.randn(100)y_points = np.sin(z_points) + 0.1 * np.random.randn(100)ax.scatter3D(x_points, y_points, z_points, c=z_points, cmap='hsv');plt.show()
9d4c6d98529c771d2026391da797fc20.png
0faf5711dd7cf4008801e39260d93432.png

这是关于3D绘图的最棒的部分:交互性。在绘制3D图形后,绘图的交互性对于探索可视化数据非常有用。通过简单地点击并拖动绘图,查看我创建的一些不同视图!

e713c30b73926572bfb36a3f6f78d51f.png

曲面图

曲面图可以很好地显示整个3D景观中3个变量之间的关系。它们提供了一个完整的结构和视图,并查看每个变量的值如何在另外两个轴上的变化。

在Matplotlib中构建曲面图有3个步骤的过程。

(1)首先,我们需要生成构成曲面图的实际点。现在,生成3D曲面的所有点是不可能的,因为它们数量无限!相反,我们将生成足够的能够估计曲面,然后推断其余的点。我们将定义xy点,然后使用函数计算z点。

fig = plt.figure()ax = plt.axes(projection="3d")def z_function(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 = z_function(X, Y)
00dea5a7c217c2d5e7e57a2934d29f3e.png

(2)第二步是绘制线框 - 这是我们对曲面的估计。

fig = plt.figure()ax = plt.axes(projection="3d")ax.plot_wireframe(X, Y, Z, color='green')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')plt.show()
96c5dabc393b6ceaef6b0123c875e8d7.png
df11ae17da2e981d09f1392355c89d85.png

(3)最后,我们将曲面投影到线框估计值上,并推断出所有点。

ax = plt.axes(projection='3d')ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='winter', edgecolor='none')ax.set_title('surface');
ac5c30356e64b0053f5d8db130bc5f52.png
eab3e77eff5909bcc2807407d0f0a7da.png

这是我们彩色的3D曲面!

3D条形图

条形图在数据可视化项目中经常使用,因为它们能够以简单直观的方式传递信息,通常是某种类型的比较。3D条形图的美妙之处在于它们保持了2D条形图的简单性,同时扩展了它们表示比较信息的能力。

条形图中的每个条形图总是需要两个东西:位置和大小。使用3D条形图,我们将为所有三个变量x,y,z提供该信息。

我们将选择z轴来编码每个条的高度;因此,每个条形将从z = 0开始,其大小与我们试图可视化的值成比例。x和y的位置表示横轴在z = 0的2D平面上的坐标。我们将设置每个条的x和y大小为1,这样所有条都具有相同的形状。

查看下面的代码和3D图表作为示例!

fig = plt.figure()ax = plt.axes(projection="3d")num_bars = 15x_pos = random.sample(xrange(20), num_bars)y_pos = random.sample(xrange(20), num_bars)z_pos = [0] * num_barsx_size = np.ones(num_bars)y_size = np.ones(num_bars)z_size = random.sample(xrange(20), num_bars)ax.bar3d(x_pos, y_pos, z_pos, x_size, y_size, z_size, color='aqua')plt.show()
044a607d512aaf56b2c134f8144a9586.png
f1a8bb46b3df4369b4ebd4fa05cb4dee.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值