【matplotlib基础】--3D图形

这篇具有很好参考价值的文章主要介绍了【matplotlib基础】--3D图形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

matplotlib1.0版本之前其实是不支持3D图形绘制的。

后来的版本中,matplotlib加入了3D图形的支持,不仅仅是为了使数据的展示更加生动和有趣。
更重要的是,由于多了一个维度,扩展了其展示数据分布和关系的能力,可以一次从三个维度来比较数据。

下面介绍在matplotlib中绘制各类3D图形的方法。

1. 点和线

点和线类的图形转成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()

【matplotlib基础】--3D图形

增加一个维度,改成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()

【matplotlib基础】--3D图形
注意,获取子图的时候,subplot_kw={"projection": "3d"} 这个参数很重要,它会把坐标系映射成3维的。

2. 面

绘制面或者曲面的时候稍微复杂一些,不像点和面只要简单的增加一个维度就可以了。

比如,对于曲面函数:\(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()

【matplotlib基础】--3D图形

只显示网格的话,可以用 plot_wireframe 函数。

ax.plot_wireframe(xs, ys, zs)

【matplotlib基础】--3D图形

从这个示例可以看出,3D曲面其实是一个个网格拼接而成的,
并没有想象中的平滑,它的平滑程度取决于网格的大小和密度。

3. 立方体

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图形

4. 总结

看了matplotlib的3D绘图功能,尤其是曲面图绘制方面,
我觉得它的3D功能不仅仅是给分析图表拓展了一个维度这么简单,而是让它在数学上的表现能力也极大提高了。

配合numpy中的数学函数,3D绘图能够展示很多复杂的几何曲面,让matplotlib的使用范围大大拓展。文章来源地址https://www.toymoban.com/news/detail-712068.html

到了这里,关于【matplotlib基础】--3D图形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入Matplotlib:画布分区与高级图形展示【第33篇—python:Matplotlib】

    Matplotlib是一个强大的Python绘图库,通过其灵活的画布分区技术,用户可以在一个画布上创建多个子图,以更清晰地呈现数据图形。本文将深入介绍Matplotlib中的画布分区方法,并通过实例演示如何在子图中展示不同类型的数据。 首先,我们使用 plt.subplot() 方法来实现画布分区

    2024年01月23日
    浏览(50)
  • 图形学、02 推导证明 | 任意一点经过透视投影后 z 坐标相对于之前有什么变化

    齐次坐标知识点: (begin{bmatrix} x \\\\ y \\\\ z \\\\ 1 \\\\end{bmatrix} Rightarrowbegin{bmatrix} nx \\\\ ny \\\\ nz \\\\ n \\\\end{bmatrix}) 两个都表示同一个点 透视投影:先将远截面按一定规则缩放到跟近截面一样大,然后再正交投影 缩放规则: 远截面 缩放后 (z) 不变,缩放过后大小同近截面相同。 截

    2024年02月08日
    浏览(40)
  • #python# #Matplotlib# 常用可视化图形

    工作中,我们经常需要将数据可视化,分享一些Matplotlib图的汇总,在数据分析与可视化中是非常有用。 如下协一些常用图形。 安装相关插件 Scatteplot是用于研究两个变量之间关系的经典和基本图。如果数据中有多个组,则可能需要以不同颜色可视化每个组。在Matplotlib,你可

    2024年02月13日
    浏览(38)
  • Python学习笔记(11-2):matplotlib绘图——图形绘制函数

    因为部分图形绘制函数共用了一套参数体系,在颜色、曲线形状等部分的使用方式也是一致的。所以,在讲解各类图形绘制之前,我们整体性地对各类通用参数进行一个整理,并在此基础上对于颜色(color)、数据点标记(marker)和曲线形式(linestyle)等几个通用参数进行相

    2024年02月06日
    浏览(58)
  • 头歌平台python数据分析——(9)Matplotlib图形配置

    ,根据输入数据绘制热成像图并隐藏坐标轴,具体要求如下: 图形的figsize为(10, 10); 图形保存到Task1/img/T1.png。 根据函数参数file_name读取文件,统计每年births的总和并作折线图,为最高/最低出生数年份设置注释,具体要求如下: 对数据进行去空值处理; 注释文字的坐标位置

    2024年02月10日
    浏览(158)
  • 数据可视化神器!Matplotlib Python教程 | 从入门到精通绘制各种类型的图形和保存图形

    大家好,我是爱吃熊掌的鱼,今天我要给大家带来一篇有趣开朗的Matplotlib Python教程。Matplotlib是Python中最流行的数据可视化库之一,它可以帮助我们将数据转化为易于理解的图表和图形。无论你是初学者还是专业人士,Matplotlib都是一个非常有用的工具。让我们开始吧! 在开

    2023年04月21日
    浏览(47)
  • python的matplotlib绘制动态图形(用animation中的FuncAnimation)

    %matplotlib auto # 数据透视表: # 统计各月每天的刷卡金额之和 # month_day_df = pd.pivot_table(data_df,values=\\\"刷卡金额\\\",index=\\\"日\\\",columns=\\\"月份\\\",aggfunc=np.sum) # 用折线图表示1月份每天的刷卡金额之和 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 导入动画库 import random import

    2023年04月18日
    浏览(48)
  • IDEA回滚代码到之前历史版本

    本文介绍,使用idea可视化操作。 1.点击最下方Git,或者项目点击右键git—show history ,可以看到提交记录如下 2.如果你想回滚到对应的步骤,则如上图所示,选择分支,右键,Copy Revision Numbers . 3.点击最上方Git,选择Reset Head ,然后如下图,输入cpoy到的对应版本号 revision numbers.

    2024年02月11日
    浏览(53)
  • Python使用Matplotlib库绘制双y轴图形(柱状图+折线图)

    今天是第一次写 踩坑日记 系列,这个系列用来记录在Python和R学习过程中遇到的问题和结果。今天介绍的是使用Python的matplotlib库绘制两个y轴图的一些基本用法与踩坑行为。希望可以帮助到大家,也希望大家可以给出建议,欢迎留言交流。 Matplotlib是Python数据分析中常用的可视

    2024年02月15日
    浏览(38)
  • idea使用git回溯到本地之前的版本

    首先,右键项目,git—show history 看到我多次提交到本地仓库的一些代码。 假如除了最上边的一个版本大于25mb, 所以我想重新把一些不需要的日志去除。 那我我右键一个最低版本,点击复制版本号 copy revison number。 然后右键项目,然后git --找到reset head,把刚才复制的复制进

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包