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

news2024/10/5 19:18:02

  • 前言

    • 一、「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.coloradmin.cn/o/1798683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Patchwork++:基于点云的快速、稳健的地面分割方法

1. 背景 论文发表在2022IROS&#xff0c;是Patchwork的改进版本。算法通过数学方法进行快速而鲁棒性很强的地面分割&#xff0c;在智能机器人上的可操作性非常强。通过微调算法&#xff0c;可以应用于16-beams等多种规格的激光雷达。由于激光雷达点云数据标注的难度非常大&…

数据泄露防护(DLP)系统有哪些?2024年数据泄露防护系统TOP5排名

数据泄露防护&#xff08;DLP&#xff09;系统是企业为确保敏感信息不被非法访问、使用或泄露而采用的重要安全策略。以下是一些常见的数据泄露防护系统&#xff0c;以及它们的功能和优点。 1、安企神 DLP 安企神 DLP是一款为企业研发的数据防泄漏系统&#xff0c;以强大的功能…

pxe自动装机

概念 pxe是c/s模式。允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像&#xff0c;加载安装文件&#xff0c;实现自动化安装操作系统。 无人值守&#xff1a;安装选项不需要人为干预&#xff0c;可以自动化实现。 pxe的优点&#xff1a;1.规模化&…

美琳莱卡:创新消费模式引领新零售时代

公司成立时间与定位 美琳莱卡自创立之初,便以独特的视角和前瞻性的战略定位,立足于消费市场的变革前沿。公司成立于2024年,正值全球数字化浪潮蓬勃兴起,消费升级趋势日益明显之际。美琳莱卡敏锐地捕捉到这一时代机遇,将自身定位为创新消费模式的引领者,致力于通过线上线下高度…

问题:当频点数大于载波数时,() #学习方法#知识分享

问题&#xff1a;当频点数大于载波数时&#xff0c;&#xff08;&#xff09; A.基带跳频可以执行&#xff0c;混合跳频可以执行 B.基带跳频不可以执行&#xff0c;混合跳频可以执行 C.基带跳频可以执行&#xff0c;混合跳频不可以执行 D.基带跳频不可以执行&#xff0c;混…

Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境

文章大纲 IDE 选择纯开源首选 Codeblocks 跨平台开发IDE其次选择 visual studio 社区版 or visual studio code包管理MSYS2pacmanconda & mambavcpkgNuGetapt-get其他手动配置 Visual studio 开发环境下载 visual studio基本配置基本测试:打开图片,打开摄像头读取图片读取…

大学信息资源管理试题及答案,分享几个实用搜题和学习工具 #职场发展#微信

人工智能技术的发展正逐渐改变着我们的生活&#xff0c;学习如何运用这些技术将成为大学生的必备素养。 1.彩虹搜题 这是个微信公众号 算法持续优化&#xff0c;提升搜题效果。每一次搜索都更精准&#xff0c;答案更有价值。 下方附上一些测试的试题及答案 1、在SpringMVC配…

C++:Traits编程技法在STL迭代器中的应用

文章目录 迭代器相应型别Traits(特性)编程技法——STL源代码门钥迭代器相应型别一&#xff1a;value_type迭代器相应型别二&#xff1a;difference_type迭代器相应型别三&#xff1a;reference_type迭代器相应型别四&#xff1a;pointer_type迭代器相应型别五&#xff1a;itera…

智能数据分析(1)Lecture 6-8b

Lecture 6: Generative Models 生成模型 vs 判别模型 判别模型&#xff08;Discriminative Models&#xff09; 判别模型的主要任务是直接学习输入 x x x 和类别 y y y 之间的关系。它们不关心数据的生成过程&#xff0c;而是直接估计类别的边界。 定义&#xff1a;判别模…

建筑建筑一建考试试题及答案,分享几个实用搜题和学习工具 #其他#职场发展

收录了大量考试类型的题库&#xff0c;大到考公&#xff0c;小到知识竞赛&#xff0c;题库资源算是比较丰富的了。操作起来也不难&#xff0c;我们只需输入题目内容&#xff0c;即可快速搜索出答案&#xff0c;而且它在给出答案的同时还会附带解析。最重要的是&#xff0c;搜题…

【YOLOv10改进[CONV]】使用DualConv二次创新C2f模块实现轻量化 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将使用DualConv二次创新C2f模块实现轻量化,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 DualConv 1 结合33卷积和11卷积核 2 DualConv 3 可视化 二 C2f_DualConv助…

轻松实现文件随机提取:从众多文件夹中智能筛选指定数量文件,一键移至目标文件夹!

在信息爆炸的时代&#xff0c;电脑中的文件越来越多&#xff0c;整理起来却越来越头疼。你是否也曾在海量的文件夹中迷失&#xff0c;苦苦寻找那个特定的文件&#xff1f;你是否也曾为了将文件从一个文件夹移动到另一个文件夹而耗费大量时间&#xff1f;现在&#xff0c;我们为…

群体优化算法---蜂群优化算法应用于数据挖掘

介绍 蜂群优化算法&#xff08;Bee Algorithm, BA&#xff09;及其变种主要模拟蜜蜂的觅食行为&#xff0c;以解决复杂的优化问题。这类算法通过蜜蜂之间的信息交流和协作来探索解空间&#xff0c;寻找全局最优解。主要应用于参数优化&#xff0c;结构优化&#xff0c;机器学习…

配音方面目前可以用AIGC替代吗?( 计育韬老师高校公益巡讲答疑实录2024)

这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声&#xff0c;互动答疑环节往往反映了高校师生当前最普遍的运营困境&#xff0c;特此计老师在现场即兴答疑之外&#xff0c;会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…

STM32项目分享:智能家居(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

设计软件有哪些?效果工具篇(2),渲染100邀请码1a12

这次我们继续介绍一些渲染效果和后期处理的工具。 1、Krakatoa Krakatoa是由Thinkbox Software开发的强大的粒子渲染器&#xff0c;可用于Autodesk 3ds Max等软件。它专注于处理大规模粒子数据&#xff0c;提供了高效的渲染解决方案&#xff0c;适用于各种特效、粒子系统和模…

VMware 三种网络模式

目录 一、网卡、路由器、交换机 二、虚拟网络编辑器 三、网络模式 1.桥接模式 通信方式 特点 配置 连通情况 使用场景 2.NAT模式 通信方式 特点 配置 连通情况 使用场景 3.仅主机 通信方式 特点 配置 连通情况 使用场景 一、网卡、路由器、交换机 网卡(Ne…

短视频矩阵源码----如何做正规开发规则分享:

一、什么是SaaS化服务技术开发&#xff1f; &#xff08;短视频矩阵系统是源头开发的应该分为3个端口---- 总后台控制端、总代理端口&#xff0c;总商户后台&#xff09; SaaS是软件即服务&#xff08;Software as a Service&#xff09;的缩写。它是一种通过互联网提供软件应…

小白新手一篇看懂PolarDB-X

小白新手一篇看懂PolarDB-X 什么是PolarDB-X如何安装安装PolarDB-X安装Mysql安装jdk Spring BootPolarDB-X应用测试安装Git及下载模板代码创建数据库业务操作 体验感受 什么是PolarDB-X 在使用一款新的产品之前&#xff0c;首先就是要对这个产品有一个基础的理解&#xff0c;适…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…