python - 3D图表绘制

news2024/11/16 1:15:20

Pyecharts 和 3D 图表绘制

Pyecharts 是一个用于生成各种图表的 Python 库,它基于 Echarts,支持大量的图表类型,非常适合用于数据分析和可视化。Pyecharts 主要优点是易于使用,可以直接在 Python 环境中绘制富有交互性的图表,并且可以轻松地嵌入到网页中。

常见的 3D 图表类型:
  1. 3D 散点图(Scatter3D)
  2. 3D 柱状图(Bar3D)
  3. 3D 曲面图(Surface3D)
  4. 3D 线框图(Line3D)



安装 Pyecharts

Pyecharts 可以通过 pip 安装:

pip install pyecharts



1. 3D 散点图(Scatter3D)

代码示例
from pyecharts import options as opts
from pyecharts.charts import Scatter3D
from pyecharts.faker import Faker

data = [list(z) for z in zip(Faker.values(), Faker.values(), Faker.values())]
scatter3d = Scatter3D()
scatter3d.add("", data)
scatter3d.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_=200),
    title_opts=opts.TitleOpts(title="3D Scatter Plot Example")
)
scatter3d.render()
解释说明

上面的代码生成一个 3D 散点图,使用 Faker.values() 生成假数据。图表设置了视觉映射和标题。render() 函数用于在文件加中生成3D图表的html文件,文件默认保存在代码文件同目录下。
在这里插入图片描述

常见问题及解决方案
  1. 问题: 图表不显示在 Jupyter Notebook。

    • 解决方案: 若要图表显示在Jupyter,可使用 render_notebook() 而非 render()
  2. 问题: 数据无法正确显示。

    • 解决方案: 检查数据格式是否符合图表所需的格式。
  3. 问题: 修改图表颜色无效。

    • 解决方案: 通过 opts.ItemStyleOpts 设置项来自定义颜色和样式。
  4. 问题: 图表标题未显示。

    • 解决方案: 确保 title_opts=opts.TitleOpts(title="Your Title") 已被正确设置。
  5. 问题: 如何保存图表为图片或 HTML 文件。

    • 解决方案: 使用 render('your_filename.html') 保存为 HTML,或使用 snapshot 插件保存为图片。



2. 3D 柱状图(Bar3D)

代码示例
from pyecharts import options as opts
from pyecharts.charts import Bar3D
from pyecharts.faker import Faker

values = Faker.values()
data_length = len(values)
data = [(i, j, values[i % data_length]) for i in range(10) for j in range(10)]
bar3d = Bar3D()
bar3d.add(
    "",
    data,
    xaxis3d_opts=opts.Axis3DOpts(type_="category", data=Faker.clock),
    yaxis3d_opts=opts.Axis3DOpts(type_="category", data=Faker.week),
    zaxis3d_opts=opts.Axis3DOpts(type_="value")
)
bar3d.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_=50),
    title_opts=opts.TitleOpts(title="3D Bar Chart Example")
)
bar3d.render()

解释说明

这段代码创建了一个 3D 柱状图,使用 Faker 库生成数据。X 轴和 Y 轴设置为类别轴,Z 轴为值轴。visualmap_opts 用于调整视觉映射的最大值属性,有助于在图表中显示不同的颜色深度。render() 函数用于在文件加中生成3D图表的html文件。
在这里插入图片描述

常见问题及解决方案
  1. 问题: 如何调整柱子的宽度。

    • 解决方案: 使用 opts.Grid3DOpts(width=200, depth=100)set_global_opts 中设置。
  2. 问题: 柱状图中的柱子重叠或难以区分。

    • 解决方案: 调整柱子的宽度和深度,以及图表的角度来增强可读性。这可以通过设置 Bar3DOpts 中的 widthdepth 参数来实现,同时也可以调整 Grid3DOptsrotate_angleis_rotate 选项来优化视角。
  3. 问题: 柱状图的标签重叠,看起来凌乱。

    • 解决方案: 调整标签的显示方式或选择不显示标签。可以使用 label_opts=opts.LabelOpts(is_show=False) 禁用标签,或调整 label_opts 中的 positionformatter 属性来改善标签的布局和内容。
  4. 问题: 数据更新后,图表不刷新。

    • 解决方案: 确保在数据更新后重新渲染图表。在 Jupyter Notebook 中使用 render() 重新渲染图表,确保数据的更新能够即时反映在图表上。
  5. 问题: 3D 柱状图在不同的浏览器或设备上显示效果不一致。

    • 解决方案: 设置图表的初始配置项 InitOpts,例如设定具体的宽度和高度。例如:init_opts=opts.InitOpts(width="1000px", height="800px"),以确保在不同设备和浏览器上具有一致的表现。
  6. 问题: 柱状图的颜色太单一或与期望不符。

    • 解决方案: 使用 visualmap_opts 来自定义柱子的颜色范围和渐变效果。可以设置颜色的最小值、最大值以及颜色列表,来创建更具吸引力和信息性的颜色编码。



3. 3D 曲面图(Surface3D)

代码示例
import math
from pyecharts import options as opts
from pyecharts.charts import Surface3D

def surface3d_data():
    for t in range(-30, 30, 1):
        y = t / 10
        for s in range(-30, 30, 1):
            x = s / 10
            z = math.sin(x ** 2 + y ** 2) * x / 3.14
            yield [x, y, z]

data = list(surface3d_data())
surface3d = Surface3D()
surface3d.add("", data)
surface3d.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_=1),
    title_opts=opts.TitleOpts(title="3D Surface Plot Example")
)
surface3d.render()
解释说明

这段代码展示了如何使用 Surface3D 创建一个 3D 曲面图。函数 surface3d_data() 生成 x, y, z 坐标点,用于构建三维曲面。图表使用 VisualMapOpts 来调整颜色映射。render() 函数用于在文件加中生成3D图表的html文件。
在这里插入图片描述

常见问题及解决方案
  1. 问题: 如何更改曲面图的颜色梯度。

    • 解决方案: 通过修改 visualmap_opts 中的 min_max_ 值,调整颜色范围。
  2. 问题: 曲面图渲染后看起来不平滑或块状。

    • 解决方案: 增加数据点的密度。在生成数据时,减小循环中的步长,这样可以生成更密集的网格点,从而使曲面看起来更平滑。例如,将步长从 1 改为 0.5 或更小。
  3. 问题: 曲面图的某些部分超出了图表的边界。

    • 解决方案: 调整视觉映射的最大值和最小值,以确保所有数据点都位于视觉映射的范围内。可以在 VisualMapOpts 中设置 min_max_ 属性。
  4. 问题: 曲面图的颜色和期望的不一致。

    • 解决方案: 修改 VisualMapOpts 中的颜色配置。可以设置 color 属性来定义颜色渐变,或使用 range_color 来指定颜色范围。
  5. 问题: 如何显示曲面下方的网格线?

    • 解决方案: 在 Grid3DOpts 中设置 grid3d_opts=opts.Grid3DOpts(is_show=True)。此选项可以控制是否显示三维网格线,有助于更好地理解数据的布局。
  6. 问题: 生成的3D曲面图在浏览器中响应缓慢或卡顿。

    • 解决方案: 优化数据点数量,避免过度密集的数据点集。此外,可以调整 render_notebook() 中的 chart_idrenderer 参数,选择一个更高效的渲染方式,比如使用 WebGL。



4. 3D 线框图(Line3D)

代码示例
from pyecharts import options as opts
from pyecharts.charts import Line3D
from pyecharts.faker import Faker

values = Faker.values()
data_length = len(values)
data = [(i, j, values[i % data_length]) for i in range(10) for j in range(10)]
line3d = Line3D()
line3d.add(
    "",
    data,
    xaxis3d_opts=opts.Axis3DOpts(type_="category", data=Faker.clock),
    yaxis3d_opts=opts.Axis3DOpts(type_="category", data=Faker.week),
    zaxis3d_opts=opts.Axis3DOpts(type_="value")
)
line3d.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(max_=50),
    title_opts=opts.TitleOpts(title="3D Line Chart Example")
)
line3d.render()
解释说明

这段代码创建了一个 3D 线框图,同样利用 Faker 生成数据。此图展示了如何在三维空间中通过线连接点,x、y、z 轴分别为类别和值轴。render() 函数用于在文件加中生成3D图表的html文件。render() 函数用于在文件加中生成3D图表的html文件。
在这里插入图片描述

常见问题及解决方案
  1. 问题: 3D 线框图中线段显示不清晰或太细。

    • 解决方案: 可以通过设置 line_style_opts 来调整线条的宽度和颜色。例如:line_style_opts=opts.LineStyleOpts(width=4, color='#ff0000') 使线条更加粗和明显。
  2. 问题: 如何控制图表的旋转角度或视角。

    • 解决方案: 在 set_global_opts 方法中使用 grid3d_opts 来设置初始旋转角度和视角,例如:grid3d_opts=opts.Grid3DOpts(rotate_speed=10, is_rotate=True)
  3. 问题: 3D 线框图在不同的显示设备上大小不一致。

    • 解决方案: 使用 init_opts 在创建图表时设置图表的宽度和高度,如 init_opts=opts.InitOpts(width="1000px", height="600px"),确保图表在不同设备上具有相同的显示效果。
  4. 问题: 数据点过多导致图表加载缓慢或浏览器崩溃。

    • 解决方案: 尽量减少数据点的数量或使用数据采样。也可以考虑分批次动态加载数据,或者在前端使用异步加载的方式减轻单次渲染的压力。
  5. 问题: 如何添加标签或注释到特定的数据点。

    • 解决方案: 可以使用 label_opts 来设置数据点的标签显示,例如:add("", data, label_opts=opts.LabelOpts(is_show=True)),这样可以在每个数据点旁边显示相应的标签。

更多问题咨询

Cos机器人

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

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

相关文章

数据分析及AI技术在旅游行业的应用

引言 旅游行业是一个充满潜力和机遇的领域,而数据分析和人工智能(AI)技术的迅猛发展为这个行业带来了前所未有的机遇和挑战。本文将探讨数据分析及AI技术在旅游行业中的具体应用及其带来的影响。 数据分析在旅游行业的4种应用 在旅游行业…

Java Web 开发 - 掌握拦截器和监听器

目录 深入了解Java Web的拦截器和监听器 拦截器(Interceptor) 拦截器的使用场景 拦截器实例 思维导图 ​编辑 监听器(Listener) 监听器的使用场景 监听器类型 监听器实例 思维导图​编辑 总结 深入了解Java Web的拦截器…

Linux专栏05:Linux基本指令之目录处理指令

博客主页:Duck Bro 博客主页系列专栏:Linux专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Linux基本指令之目录处理指令 编号:05 文章目录 Linux基…

打破失联困境:门店如何利用AI智能名片B2B2C商城小程序重构与消费者的紧密连接?

在如今这个消费者行为日益碎片化的时代,门店经营者们时常感叹:消费者进店如同一场不期而遇的缘分,然而一旦离开门店,就仿佛消失在茫茫人海中,难以再觅其踪迹。这种“进店靠缘分,离店就失联”的困境&#xf…

Tracecat:开源 SOAR

Tracecat 是一个面向安全团队的开源自动化平台。 开发人员认为,每个人都应该可以使用安全自动化,特别是人手不足的中小型团队。 核心功能、用户界面和日常工作流程基于一流安全团队的现有最佳实践。 使用专门的人工智能模型来标记、总结和丰富警报。 …

(三十二)第 5 章 数组和广义表(稀疏矩阵的十字链表存储表示实现)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

第12章 软件测试基础(第一部分)概念、质量保证、测试用例、测试执行过程

一、软件测试 &#xff08;一&#xff09;定义 动态验证计算机程序对有限的测试用例集是否可产生期望的结果的过程。测试计划是描述了要进行的测试活动的范围、方法、资源和进度的文档。编写测试计划目的&#xff1a;使测试工作顺利进行、使项目参与人员沟通更舒畅、使测试工…

第十五届蓝桥杯

经历半年以来的学习&#xff0c;终于出结果了。期间无数次想要放弃&#xff0c;但是我都挺过来了&#xff0c;因为我还不能倒下。期间有很多次焦虑&#xff0c;一直在想&#xff0c;我要是没拿奖我是不是白学了。但是学到最后就释怀了&#xff0c;因为在备赛期间&#xff0c;我…

OpenCV如何为等值线创建边界旋转框和椭圆(63)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV 为轮廓创建边界框和圆(62) 下一篇:OpenCV的图像矩(64) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::minAreaRect使用 OpenCV 函数 cv::fitEllipse cv::min…

ClickHouse安装(成功安装)

1.下载安装包 下面通过阿里镜像&#xff08;https://mirrors.aliyun.com/clickhouse/rpm/lts/&#xff09;进行下载&#xff0c;下载哪里&#xff0c;自行指定。 # deb包下载使用如下4行 wget https://mirrors.aliyun.com/clickhouse/deb/pool/stable/clickhouse-client_22.8…

B站评论区自动私信关注助手

电脑协议版本&#xff0c;不支持安卓系统 支持一键采集评论区精准用户&#xff0c;可通过关键词进行筛选&#xff0c;导出数据表格 支持全自动关注私信&#xff0c;实现评论区截流曝光&#xff0c;日引500精准粉 支持一台电脑批量账号矩阵&#xff0c;定点爆破&#xff0c;全…

Mac 版 安装NVM

优质博文IT-BLOG-CN NVM&#xff08;Node Version Manager&#xff09;是一个用于管理多个Node.js版本的工具。它允许开发者在同一台机器上安装和切换不同版本的Node.js&#xff0c;以便在不同的项目中使用不同的Node.js版本。macOS用户可以使用homebrew来安装NVM。 一、安装h…

黑马 - websocket搭建在线聊天室

这里写自定义目录标题 一、消息推送常见方式二、websocket 是什么&#xff1f;三、websocket api的介绍1、客户端 &#xff08;浏览器&#xff09; 四、实现在线聊天室1、需求2、聊天室流程分析3、消息格式4、代码实现 一、消息推送常见方式 1、轮训方式 2、SSE&#xff08;…

Python | Leetcode Python题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:row len(obstacleGrid)col len(obstacleGrid[0])dp [[0]*col for _ in range(row)]for i in range(row):for j in range(col):if not obs…

Vue 组件化开发、根组件

Vue开发的两种方式&#xff1a; 核心包传统开发模式&#xff1a;基于html/css/js文件&#xff0c;直接引入核心包&#xff0c;开发Vue工程化开发模式&#xff1a;基于构建工具的环境中开发Vue 这里选择Vue cli脚手架 进行开发&#xff0c;搜索教程自行下载。 组件化开发 一个页…

Elasticsearch:理解近似最近邻 (ANN) 算法

作者&#xff1a;来自 Elastic Elastic Platform Team 如果你是在互联网出现之前长大的&#xff0c;你会记得找到新喜好并不总是那么容易。我们是在无意中听到收音机里的新乐队时发现他们的&#xff0c;是因为忘了换频道偶然看到一个新电视节目的&#xff0c;也是几乎完全依据游…

『项目整理』易CAR通项目说明文档-我的第一款APP

『项目整理』易CAR通项目说明文档-我的第一款APP 项目介绍功能介绍技术栈介绍实现效果如何运行备注 项目介绍 易CAR通项目是我的第一个Android项目。是一款结合了AR技术的模仿懂车帝的看车软件。因为是初学&#xff0c;所示实现的效果差强人意&#xff0c;很多的功能界面只实现…

算法训练营第十三天 | LeetCode 239 滑动窗口最大值、LeetCode 347 前K个高频元素

LeetCode 239 滑动窗口最大值 本体初始思路是这样的&#xff0c;首先看下给定数组长度和维持一个滑动窗口所需要花费的时间复杂度之间的关系。初步判断是还行的&#xff0c;当然后面被样例打脸了。需要更新成优先队列的解法。原本的解法能通过37/51和46/51的测试用例。但这还不…

Dynamic-Programming

目录 前言 引入 1) Fibonacci 2) 最短路径 - Bellman-Ford 3) 不同路径-Leetcode 62 4) 0-1 背包问题 降维 5) 完全背包问题 降维 6) 零钱兑换问题-Leetcode322 降维 零钱兑换 II-Leetcode 518 7) 钢条切割问题 降维 类似题目 Leetcode-343 整数拆分 8) 最长…

如何安全的使用密码登录账号(在不知道密码的情况下)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具&#xff0c;进入账号密码模块&#xff0c;如图 2、看到鼠标移动到密码那一栏有提示&#xff0c;按住Ctrl或者Alt点击或者双击就能复制内容&…