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 = xyz
    Z =  (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
    return x,y,Z

pi = np.pi

def 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)*pi
    p = (y/3 +1)*pi/2
    r = z + 2   # <-- shift the radius
    return 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 operation

contours = 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 = xyz
    X,Y = 5*x, 5*y
    st1 = -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 + 20
    Z = Z1 + Z2
    return x,y, Z/8 - 1

def Himmelblau(xyz) :
    x,y,z = xyz
    X,Y = 5*x, 5*y
    Z1 = np.square( X*X + Y - 11 )
    Z2 = np.square( Y*Y + X - 7  ) 
    Z = Z1 + Z2
    return x,y, Z/500 - 1

def Rosenbrock(xyz) :
    x,y,z = xyz
    X,Y = 2*x, 2*y+1
    Z1 = np.square( 1 - X )
    Z2 = 100*np.square( Y - X*X  ) 
    Z = Z1 + Z2
    return x,y, Z/1000 - 1

def Rastrigin(xyz) :
    x,y,z = xyz
    X,Y = 5*x, 5*y
    Z = 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)/2
    return 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/689224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文速读】| BIOCODER:一个具有上下文实用知识的生物信息学代码生成基准测试

本次分享论文&#xff1a;BIOCODER: A Benchmark for Bioinformatics Code Generation with Contextual Pragmatic Knowledge 基本信息 原文作者&#xff1a;Xiangru Tang, Bill Qian, Rick Gao, Jiakang Chen, Xinyun Chen, Mark Gerstein 作者单位&#xff1a;耶鲁大学, Go…

【SpringBoot + Vue 尚庭公寓实战】租期管理接口实现(四)

【SpringBoot Vue 尚庭公寓实战】租期管理接口实现&#xff08;四&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】租期管理接口实现&#xff08;四&#xff09;1、查询全部租期列表2、保存或更新租期信息3、根据ID删除租期 租期管理共有三个接口&#xff0c;分别是 保…

HDFS的块汇报和块放置策略--从一次HDFS写文件故障开始(WIP)

文章目录 前言事故分析&#xff1a;代码解析BlockReport的调度和时机哪些Block会进行FBR或者IBRIBR所选定的BlockFBR所选定的Block 块放置策略详解之在上层寻找机器为文件添加块的基本流程块放置策略&#xff1a;选择机器为每个副本逐个寻找机器在指定范围内随机寻找简单看一下…

如何学习使用淘宝API?淘宝API运营场景

学习使用淘宝API涉及对其功能、分类、调用方法及实际应用的综合理解。下面按部分详细解释如何系统地学习和掌握淘宝API的使用&#xff1a; 淘宝API接口入门 了解淘宝开放平台&#xff1a;淘宝开放平台为开发者提供了一个可以与淘宝数据进行交互的平台&#xff0c;涵盖了丰富的A…

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题 *解决方法一&#xff1a; 将抽屉弹窗里从后端返回得到的值缓存在浏览器中&#xff0c;在当前页面中从浏览器中获取该值。 &#xff08;原理其实就是借助第三个盒子来传递一下值&#xff0c;太小学…

C#操作MySQL从入门到精通(12)——对查询结果进行计算

前言 我们有时候需要对查询到的数据进行一些计算,比如将两个列的数据拼接在一起,比如将两个列的数据进行相乘,Mysql中是支持这种操作的,下面我来详细介绍: 本篇文章测试使用的数据库如下: 1、将两个列的数据进行拼接 我们将姓名和年龄这两个列的数据进行拼接,如下:…

变压器绕线完成之后要做的事

1 调整感量&#xff1a;测主绕组电感量&#xff0c;通过磨气隙或垫气隙&#xff0c;测得感量没错以后&#xff0c;用胶带封装磁芯 2 测验同名端是否正确&#xff1a;两绕组首尾相连&#xff0c;测试连接后的总感量&#xff0c;是否比感量大的那个绕组还大。如果是&#xff0c;…

Apple开发者应用商店(AppStore)描述文件及ADHOC描述文件生成

创建AD HOC描述文件 1.选中Profiles,然后点击加号创建 2.创建已注册设备可安装描述文件 3.选择要注册的id 4.选择证书 5.选择设备 6.输入文件名,点击生成 7.生成成功,点击下载

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大型机械智能预警系统

三一重工股份有限公司&#xff0c;是由三一集团创建于1994年&#xff0c;通过打破国人传统的“技术恐惧症”坚持自主创新迅速崛起。2011年7月&#xff0c;三一重工以215.84亿美元的市值荣登英国《金融时报》全球市值500强&#xff0c;是迄今唯一上榜的中国机械企业。2012年1月&…

Qsemaphore

Qsemaphore 实现 给while循环阻塞延时 基本思路就是&#xff1a; whlie循环里面 通过m&#xff3f;bthreadFlag&m_bStatus这两个标志位&#xff0c;判断是否进入while循环&#xff0c;再根据40行的acquire&#xff08;&#xff09;来阻塞循环&#xff0c;因为定时器的槽函数…

YOLOv5车流量监测系统研究

一. YOLOv5算法详解 YOLOv5网络架构 上图展示了YOLOv5目标检测算法的整体框图。对于一个目标检测算法而言&#xff0c;我们通常可以将其划分为4个通用的模块&#xff0c;具体包括&#xff1a;输入端、基准网络、Neck网络与Head输出端&#xff0c;对应于上图中的4个红色模块。Y…

探索加密货币:打造Web3项目与企业的新篇章

本文来源香港Web3媒体&#xff1a;Techub News 在数字化浪潮席卷全球的今天&#xff0c;加密货币及Web3项目和企业正成为引领创新的重要力量。作为这一领域的观察者&#xff0c;Mark Beylin深入剖析了如何通过打造人们真正需要的代币&#xff0c;来推动Web3项目的成功与企业的蓬…

浅谈Spring MVC

文章目录 一、什么是 Spring MVC&#xff1f;1.1、MVC定义1.2、MVC 和 Spring MVC 的关系&#xff1f; 1.3、为什么要学习 Spring MVC?二、需要掌握Spring MVC的一些功能2.1 Spring MVC 的创建和连接功能实现2.2 Spring MVC 获取参数功能2.2.1、传递单个参数2.2.2、传递对象2.…

大漠插件7.2422

工具名称:大漠插件7.2422 /更新时间2024年6月2日 / v7.2422 1. 综合工具的图像编辑工具可以缩放窗口了 2. 增加AiFindPic AiFindPicEx AiFindPicMem AiFindPicMemEx AiEnableFindPicWindow 共5个接口 / 工具简介: 大漠 综合 插件 (dm.dll)采用vc6.0编写&#xff0c;识别速度超级…

北京崇文门中医医院贾英才与行业共进——第二届海峡两岸中西医结合肾脏病学术大会

第二届海峡两岸中西医结合肾脏病学术大会授牌仪式于2024年6月7号在北京前门国医堂举行。 第二届海峡两岸中西医结合肾脏病学术大会的主要议程可能包括以下内容&#xff1a; 学术讲座&#xff1a;来自海峡两岸的专家学者发表演讲&#xff0c;分享肾脏病防治、透析技术等方面的研…

多尺度注意力创新

深度之眼17种多尺度注意力创新

离散数学答疑 3

&#xff5e;A&#xff1a;A的补集 有时候空集是元素&#xff0c;有时候就是纯粹的空集 A-B的定义&#xff1a; 笛卡尔积&#xff1a; 求等价关系&#xff1a;先求划分再一一列举 不同划分&#xff1a;分几块。一块&#xff1a;两块&#xff1a;三块&#xff1a;分别计算 Ix是…

微信小程序发布流程

目录 一、小程序注册二、小程序发布1.小程序信息、小程序类目、微信认证、微信备案&#xff08;1&#xff09;填写小程序信息&#xff08;2&#xff09;补充小程序类目&#xff08;3&#xff09;微信认证&#xff08;4&#xff09;微信备案 2.设置服务器域名3.开通地理位置相关…

探索风电机组:关键软件工具全解析

探索风电机组&#xff1a;关键软件工具全解析 随着可再生能源市场的迅猛发展&#xff0c;风电作为一种重要的可再生能源&#xff0c;其相关技术和工具也越来越受到重视。风电机组的设计、仿真、优化及运维等方面&#xff0c;都需要依靠一系列专业软件工具来实现。这些软件涵盖…

Erlang

官网地址&#xff1a; Index - Erlang/OTP windows环境变量配置 创建新系统变量 ERLANG_HOME 在path加入上述配置