S3Dlib | 太炫酷!所有3D图形它都可以绘制...

2024-06-07 19:12

本文主要是介绍S3Dlib | 太炫酷!所有3D图形它都可以绘制...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 前言

    • 一、「s3dlib」-Python中王炸3D绘图神器

    • 二、可视化学习圈子是干什么的?

    • 三、系统学习可视化

    • 四、猜你喜欢

前言

我们的数据可视化课程已经上线啦!!目前课程的主要方向是 科研、统计、地理相关的学术性图形绘制方法,后续也会增加商务插图、机器学等、数据分析等方面的课程。课程免费新增,这点绝对良心!

我们第一个数据可视化交流圈子也已经上线了,主要以我的第一本书籍《科研论文配图绘制指南-基于Python》为基础进行拓展,提供「课堂式」教学视频,还有更多拓展内容,可视化技巧远超书籍本身,书籍修正和新增都会分享到圈子里面~~

参与课程或者圈子的你将获取到:学员答疑、可视化资源分享、可视化技巧补充、可视化业务代做(学员和甲方对接)、副业交流、提升认知等等。

「s3dlib」-Python中王炸3D绘图神器

之前有介绍过Python语言中的一些3D图形绘制工具,大部分都是第三方的工具,其语法和Python基础绘图工具Matplotlib有着较大的不同,今天给大家推荐一个直接基于Matplotlib工具的3D图形王炸绘制工具-「S3Dlib」

  • s3dlib工具介绍

S3Dlib是一个用于可视化三维曲面线条的 Python 库,可与Matplotlib库结合使用。

S3Dlib采用面向对象的方法来构建三维曲面和线条。通过在本地坐标系中预定义的三维曲面网格,S3Dlib 可轻松构建曲面对象,从而实现更高级的三维功能关系。

S3Dlib类直接源自Matplotlib 类。因此,在使用 S3Dlib 时,可以使用该库提供的所有对象属性。一旦创建,S3Dlib 对象将直接添加到 Matplotlib Axes3D 中。

即S3Dlib用于创建对象,然后使用 Matplotlib 进行对象渲染和图形注释。

可通过如下语句便捷的安装S3Dlib工具:

pip install s3dlib
  • s3dlib3D图形可视化案例

S3Dlib中提供了多个绘制3D图形的函数,下面就简单介绍下小编认为比较炫酷的3D图形作品。

  1. Matplotlib Examples

import numpy as np
import matplotlib.pyplot as plt
import s3dlib.surface as s3d#.. Contours in spherical coordinates#.. Matplotllib Examples: contour(x, y, z) and contourf(x, y)
def z_func(xyz) :x,y,z = xyzZ =  (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)return x,y,Zpi = np.pidef rpt_func(rtp) :r,t,p = rtp# map to flat xyz plane [-3,3]x = 3*(t/pi - 1)y = 3*(2*p/pi -1)z = np.zeros(len(x))x,y,z = z_func([x,y,z])  # <-- use Matplotlib functional form# transform to a spherical coordinates, (r,t,p)t = (x/3 +1)*pip = (y/3 +1)*pi/2r = z + 2   # <-- shift the radiusreturn r,t,p# 2. Setup and map surface .........................................
rez = 5
surface = s3d.SphericalSurface(rez,cmap='jet').domain(3)
surface.map_geom_from_op(rpt_func)
surface.map_cmap_from_op()  # default: radial direction operationcontours = surface.contourLineSet(10) # default: spherical contours# 3. Construct figure, add surface, and plot ......................fig = plt.figure(figsize=(8,3.5))
fig.text(0.5,0.975,str(surface), ha='center', va='top', fontsize='smaller')
minmax,ticks = (-3,3),[-3,0,3]
for i in range(2) :ax = fig.add_subplot(121+i, projection='3d')ax.set(xticks=ticks,yticks=ticks,zticks=ticks,xlim=minmax, ylim=minmax, zlim=minmax )ax.tick_params(labelcolor='w')ax.set_proj_type('ortho')ax.view_init(azim=-145)ax.xaxis.set_pane_color([1,1,1])ax.yaxis.set_pane_color([1,1,1])ax.zaxis.set_pane_color([1,1,1])ax.add_collection3d(contours.fade(ax=ax) if i==0 else surface.shade(.2,ax=ax))fig.tight_layout(pad=0)plt.show()

Matplotlib绘图案例

Matplotlib绘图案例

  1. Surface Plots

import numpy as np
import matplotlib.pyplot as plt
import s3dlib.surface as s3d
import s3dlib.cmap_utilities as cmu  #.. Function plots, z = f(x,y) # 1. Define functions to examine ....................................
# all functions normalized into the domain [-1.1]def Ackley(xyz) :x,y,z = xyzX,Y = 5*x, 5*yst1 = -0.2*np.sqrt( 0.5*( X*X + Y*Y) )Z1 = -20.0*np.exp(st1)st2 = 0.5*( np.cos(2*np.pi*X) +  np.cos(2*np.pi*Y) )Z2 = -np.exp(st2) + np.e + 20Z = Z1 + Z2return x,y, Z/8 - 1def Himmelblau(xyz) :x,y,z = xyzX,Y = 5*x, 5*yZ1 = np.square( X*X + Y - 11 )Z2 = np.square( Y*Y + X - 7  ) Z = Z1 + Z2return x,y, Z/500 - 1def Rosenbrock(xyz) :x,y,z = xyzX,Y = 2*x, 2*y+1Z1 = np.square( 1 - X )Z2 = 100*np.square( Y - X*X  ) Z = Z1 + Z2return x,y, Z/1000 - 1def Rastrigin(xyz) :x,y,z = xyzX,Y = 5*x, 5*yZ = 20 + X*X + Y*Y - 10*np.cos(2*np.pi*X) - 10*np.cos(2*np.pi*Y)return x,y, Z/40 - 1# ..........................
def nonlinear_cmap(n) :# assume -1 < n < 1, nove to domain of [0,1]N = (n+1)/2return np.power( N, 0.1 )# 2 & 3. Setup surfaces and plot ....................................
rez=6
cmap = cmu.hsv_cmap_gradient( 'b' , 'r' , smooth=0.8)
funcList = [ Ackley, Himmelblau, Rosenbrock, Rastrigin ]minmax, ticks = (-1,1), (-1,0,1)
fig = plt.figure(figsize=(8,6))
for i in range(4) :# setup surfaces ....... surface = s3d.PlanarSurface(rez,basetype='oct1')surface.map_geom_from_op(funcList[i])surface.map_cmap_from_op(lambda xyz :  nonlinear_cmap(xyz[2]), cmap )# ...................... ax = fig.add_subplot(2,2,1+i, projection='3d')ax.set(xlim=minmax, ylim=minmax, zlim=minmax )ax.set_title(surface.name, fontsize='large', horizontalalignment='left')ax.set_xticks(ticks)ax.set_yticks(ticks)ax.set_zticks(ticks)ax.set_proj_type('ortho')ax.view_init(25)ax.add_collection3d(surface.shade(.5))fig.tight_layout(pad=1)
plt.show()

还可以绘制以下样式:

  1. Surface Image Mapping

这个部分的代码较为繁琐,我直接给出绘制结果:

更多关于S3Dlib工具的使用语法和可视化案例,读者可参考S3Dlib官网[1]

可视化学习圈子是干什么的?

可视化学习圈子是书籍「科研论文配图绘制指南-基于Python」一书的学下圈子:主要通过以下几个方面,给大家带来比纸质书籍更丰富的学习内容:

  • 视频教学,和读者零距离互动交流

  • 及时修正勘误和定期新增绘制知识点

  • 拓展衍生,绘图知识点远超书籍本身

  • 直播视频+拓展资料+答疑,学习更高效

「PS」:我们直播教学内容为课堂式教学,原作者带着大家对书籍一章、一节、一页的进行教学。而且直播的视频都会通过剪辑后整理成课程,圈子中的同学可以免费、反复观看。当然,新增内容和定期答疑,直播也是如此。

  • 为何会有这个书籍学习社群? 无门槛的微信群难免会鱼龙混杂,问题和质量都无法得到保证,而且一些关键问题经常被淹没,且没有沉淀价值。

  • 随着添加我微信的人日益增多,向我提问的人也越来越多,随便回答一下就太不负责任了;不回答也不是很好;如果都仔细回答,我也有自己的工作并且确实很忙,真的有点心有余而力不足!所以我才会建立这么一个渠道来沉淀我的可视化技巧和分享经验,以及给大家提供一个坚持学习的平台。

微信扫码下方二维码即可参与我们的书籍学习圈子啦:

微信扫码即可加入学习圈子

微信扫码即可加入学习圈子

系统学习可视化

当然,在学习数据可视化的道路上,你也有很多问题得不到解答,也可以加入我们的可视化课程(可视化系列课程推文)后,在学员群里和大家一起谈论,一起进步,或者直接向我提问。如果我觉得你的问题很具有普适性,我会把它写成文章发布在公众号上,让更多人看到,有关我们数据可视化系列课程的服务内容,可以参考下面的 阅读原文

猜你喜欢

不是?!这种图一行代码就搞定了,超简单....

不是?!这种图一行代码就搞定了,超简单....

这图这么多人问!?赶紧给大家复现出来~~..

这图这么多人问!?赶紧给大家复现出来~~..

ggpubr!一键绘制出版级论文配图,绘图小白福音......

ggpubr!一键绘制出版级论文配图,绘图小白福音......

tidyterra!空间数据处理、可视化神器...

tidyterra!空间数据处理、可视化神器...

Antarctic-Plots!不用ArcGIS,我照样可以画出惊艳的地图...

Antarctic-Plots!不用ArcGIS,我照样可以画出惊艳的地图...

比Matplotlib合并子图更方便!patchworklib让我告别PS拼图...

比Matplotlib合并子图更方便!patchworklib让我告别PS拼图...

Xarray,不用ArcGIS,所有地理空间绘图全搞定...

Xarray,不用ArcGIS,所有地理空间绘图全搞定...

Nature都推荐的箱线图(Boxplot)绘制工具长啥样?免费、在线、灵活操作...?

Nature都推荐的箱线图(Boxplot)绘制工具长啥样?免费、在线、灵活操作...?

完美解决Matplotlib绘图中、英文字体混显问题..

完美解决Matplotlib绘图中、英文字体混显问题..

MATLAB绘图不好看?!不是,你是还没发现这几个工具包吧..

MATLAB绘图不好看?!不是,你是还没发现这几个工具包吧..

不是,这个地理数据工具这么强的吗?数据处理、可视化它都行..

不是,这个地理数据工具这么强的吗?数据处理、可视化它都行..

这种环形图太难画?!带你一行代码搞定..

这种环形图太难画?!带你一行代码搞定..

不是,这封面图这么多人问的吗?教程来了

不是,这封面图这么多人问的吗?教程来了

不用Seaborn,这个工具也能绘制超炫的统计图形···

不用Seaborn,这个工具也能绘制超炫的统计图形···

NetworkX,网络结构图最强绘制工具·····

NetworkX,网络结构图最强绘制工具·····

参考资料

[1]

S3Dlib官网: https://s3dlib.org/index.html。

这篇关于S3Dlib | 太炫酷!所有3D图形它都可以绘制...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040053

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件