- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
matplotlib 在 1.0版本之前 其实是不支持3D图形绘制的.
后来的版本中, matplotlib 加入了 3D图形 的支持,不仅仅是为了使数据的展示更加生动和有趣。 更重要的是,由于多了一个维度,扩展了其展示数据分布和关系的能力,可以一次从三个维度来比较数据.
下面介绍在 matplotlib 中绘制各类 3D图形 的方法.
点和线类的图形转成 3D 比较简单,只要加个维度即可。 比如:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
n = 10
xs = np.linspace(0, 100, n)
ys = np.linspace(100, 200, n)
fig, ax = plt.subplots()
ax.scatter(xs, ys, color="r")
ax.plot(xs, ys)
plt.show()
增加一个维度,改成 3D 图形:
n = 10
xs = np.linspace(0, 100, n)
ys = np.linspace(100, 200, n)
zs = xs + ys #增加一个维度,值为x+y的和
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.scatter(xs, ys, zs, color='r')
ax.plot(xs, ys, zs)
plt.show()
注意 ,获取子图的时候, subplot_kw={"projection": "3d"} 这个参数很重要,它会把坐标系映射成3维的.
绘制面或者曲面的时候稍微复杂一些,不像点和面只要简单的增加一个维度就可以了.
比如,对于曲面函数: \(z = x*y^3 - y*x^3\) 绘制时,不能像如下这样:
xs = np.arange(-10, 10, 0.5)
ys = np.arange(-10, 10, 0.5)
zs = xs * (ys**3) - ys * (xs**3)
这样得到的 xs, ys, zs 只是 3维 中的一个个点的 (x, y, z) 坐标,无法绘制曲面。 只能像上一节那样绘制 3维 中的 点 或者 线 .
若要绘制曲面,需要用到 numpy 提供的 meshgrid 函数先生成网格.
xs = np.arange(-10, 10, 0.5)
ys = np.arange(-10, 10, 0.5)
xs, ys = np.meshgrid(xs, ys) #生成网格坐标
zs = xs * (ys**3) - ys * (xs**3) #计算网格中每个点的Z轴坐标
这样,把坐标传入 plot_surface 函数,就可以绘制最后的 3D曲面 了.
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(xs, ys, zs)
plt.show()
只显示网格的话,可以用 plot_wireframe 函数.
ax.plot_wireframe(xs, ys, zs)
从这个示例可以看出, 3D曲面 其实是一个个网格拼接而成的, 并没有想象中的平滑,它的 平滑程度 取决于网格的大小和密度.
matplotlib 中提供了一个绘制立方体的函数 voxels ,通过这个函数可以很方便的绘制各种立方体形状.
我用 voxels 绘制了一个简易的金字塔结构:
x, y, z = np.indices((10, 10, 8))
cube1 = (x < 9) & (y < 9) & (z == 1)
cube2 = (x > 0) & (x < 8) & (y > 0) & (y < 8) & (z == 2)
cube3 = (x > 1) & (x < 7) & (y > 1) & (y < 7) & (z == 3)
cube4 = (x > 2) & (x < 6) & (y > 2) & (y < 6) & (z == 4)
cube5 = (x > 3) & (x < 5) & (y > 3) & (y < 5) & (z == 5)
cube = cube1 | cube2 | cube3 | cube4 | cube5
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
fig.set_size_inches(8, 6)
ax.voxels(cube, color="goldenrod", edgecolor="g")
plt.show()
看了 matplotlib 的3D绘图功能,尤其是曲面图绘制方面, 我觉得它的 3D功能 不仅仅是给分析图表拓展了一个维度这么简单,而是让它在数学上的表现能力也极大提高了.
配合 numpy 中的数学函数,3D绘图能够展示很多复杂的几何曲面,让 matplotlib 的使用范围大大拓展.
最后此篇关于【matplotlib基础】--3D图形的文章就讲到这里了,如果你想了解更多关于【matplotlib基础】--3D图形的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!