如何在曲面图上绘制等高线? (4D)

2024-01-31

我想制作一个 4d 图,其中有 X、Y、Z(作为表面)和 C(显示为该表面上的轮廓)。

我现在拥有的:

我想要什么:

我怀疑答案将是一些 Facecolors 或 countourf3d 的技巧,但我似乎无法弄清楚。非常感谢任何帮助。

My code:

import scipy.ndimage
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm 

def surfcont4d(X,Y,Z,V):
    # create the figure, add a 3d axis, set the viewing angle
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.view_init(45, 60)
    # pass V through a colormap
    # to create a different color for each patch
    ax.plot_surface(X, Y, Z, facecolors=cm.viridis(V))

X, Y = np.meshgrid(np.arange(10, 150, 10), np.arange(0.2, 1.1, 0.1))
a = np.linspace(0,1,9)
Y = np.outer(a, np.ones(len(X[0]))) * 100
Z = np.array([[0.64973325, 0.53515948, 0.49395166, 0.47048054, 0.45929325,
        0.44264298, 0.43261494, 0.42899264, 0.42583298, 0.4223746 ,
        0.41722221, 0.41442178, 0.40065205, 0.39769079],
       [0.62770776, 0.53362009, 0.47696235, 0.45932722, 0.44614831,
        0.43600277, 0.42293966, 0.41951736, 0.41337537, 0.39341246,
        0.39956476, 0.39559026, 0.3900403 , 0.39871355],
       [0.59047691, 0.48911162, 0.45336888, 0.4296547 , 0.41306259,
        0.39526081, 0.39405154, 0.39222265, 0.38009502, 0.37815339,
        0.37096558, 0.37121551, 0.36307045, 0.35840302],
       [0.53244184, 0.43339659, 0.39971169, 0.3741131 , 0.3674958 ,
        0.35450917, 0.35238419, 0.35619535, 0.33850515, 0.33228488,
        0.33243361, 0.32146902, 0.32457041, 0.32624984],
       [0.45500922, 0.36519554, 0.33867042, 0.3277988 , 0.30405943,
        0.30612668, 0.29369345, 0.296668  , 0.28407045, 0.28679028,
        0.27722738, 0.28103004, 0.28191956, 0.27282813],
       [0.38492018, 0.28249663, 0.27552047, 0.25881802, 0.25206595,
        0.24045726, 0.23946971, 0.240498  , 0.23948903, 0.22639278,
        0.22632585, 0.22432282, 0.22516114, 0.21896454],
       [0.28259348, 0.22550271, 0.19891905, 0.18448714, 0.19401654,
        0.18600271, 0.18530338, 0.17950915, 0.18275452, 0.17640127,
        0.17537138, 0.17674194, 0.17295892, 0.1702361 ],
       [0.18322884, 0.14733492, 0.14310084, 0.12946202, 0.12689525,
        0.12657301, 0.12186691, 0.12920993, 0.12584537, 0.1256204 ,
        0.13213837, 0.12466389, 0.12450796, 0.12225329],
       [0.1105487 , 0.0845864 , 0.08335327, 0.07945915, 0.08722117,
        0.08318086, 0.08492171, 0.07744648, 0.07810146, 0.08207355,
        0.08195124, 0.08247904, 0.07876156, 0.08182614]])
C = np.array([[ 7.33333333,  7.33333333,  8.        ,  8.33333333,  8.33333333,
         9.33333333, 10.        , 10.66666667, 11.66666667, 11.33333333,
        12.66666667, 12.66666667, 14.33333333, 14.        ],
       [ 7.33333333,  7.        ,  7.        ,  8.        ,  9.        ,
         9.33333333, 10.33333333, 10.66666667, 11.33333333, 12.        ,
        13.        , 13.        , 14.        , 14.66666667],
       [ 7.        ,  7.        ,  7.33333333,  7.66666667,  8.66666667,
         9.        ,  9.66666667, 10.33333333, 11.        , 11.33333333,
        11.66666667, 12.66666667, 13.        , 13.        ],
       [ 7.        ,  6.33333333,  6.66666667,  8.        ,  7.66666667,
         8.        ,  9.        ,  9.33333333, 10.33333333, 11.        ,
        11.66666667, 11.66666667, 13.        , 13.        ],
       [ 6.66666667,  6.        ,  6.33333333,  6.66666667,  7.        ,
         7.66666667,  8.33333333,  8.66666667,  9.        ,  9.66666667,
        10.        , 10.66666667, 12.33333333, 12.        ],
       [ 5.66666667,  5.33333333,  6.        ,  5.66666667,  7.33333333,
         7.        ,  7.33333333,  7.33333333,  8.33333333,  9.        ,
         9.66666667, 10.        , 10.66666667, 11.33333333],
       [ 5.        ,  4.33333333,  4.66666667,  5.        ,  5.33333333,
         6.        ,  6.33333333,  7.33333333,  7.        ,  7.66666667,
         8.        ,  9.        ,  8.33333333,  9.33333333],
       [ 3.        ,  4.        ,  4.        ,  4.        ,  4.33333333,
         5.        ,  5.33333333,  5.66666667,  6.        ,  6.33333333,
         7.        ,  7.33333333,  8.        ,  7.66666667],
       [ 2.        ,  3.        ,  3.        ,  3.        ,  3.33333333,
         3.66666667,  4.        ,  4.66666667,  4.66666667,  4.66666667,
         5.66666667,  5.33333333,  5.66666667,  6.33333333]])


surfcont4d(X,Y,Z,C)

最后我通过在曲面图上方绘制等高线图解决了这个问题。这样,等高线就不会被绘图表面弯曲。

我使用的方法如下:

def projection_plot(X, Y, Z, V):
    """X,Y,Z and V are arrays with matching dimensions"""

    fig = plt.figure()
    ax = fig.gca(projection='3d')

    # Plot the 3D surface and wireframe
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.9, 
    cmap='Greys_r', vmin=-10, vmax=45)
    ax.plot_wireframe(X, Y, Z, rstride=1, cstride=1, lw=0.5, 
    colors='k')

    # Plot projections of the contours for each dimension.  By choosing offsets
    # that match the appropriate axes limits, the projected contours will sit on
    # the 'walls' of the graph
    sc12 = ax.contourf(X,Y, V, vmin=0, vmax=100, cmap='viridis_r', alpha=0.9, zdir='z', offset=50, levels=np.linspace(0,100,11))
    sc1 = ax.contour(X, Y, V, colors='w', alpha=1, zdir='z', offset=50.1, linewidths=0.3, levels=np.linspace(0,100,11))

    # Set axis properties
    ax.set_zlim(0, 50)
    ax.zaxis.set_rotate_label(False)  # disable automatic rotation
    ax.set_zlabel('\n Speed', rotation=90, fontsize=9)
    ax.set_xlabel('Total Information', fontsize=7)
    ax.set_ylabel('Participation Inequality', fontsize=7)
    ax.set_xticks([10,40,70,100,130])
    ax.set_yticks([0, 25, 50, 75, 100])
    ax.tick_params(axis='both', which='major', labelsize=9)

    ax.view_init(30, 225)
    ax.set_frame_on(True)
    ax.clabel(sc1, inline=1, fontsize=10, fmt='%2.0f')

    cbar = fig.colorbar(sc12, shrink=0.6, aspect=10)
    cbar.ax.text(2.30, 0.98, '%', fontsize=7)
    cbar.ax.text(1.77, -0.015, '%', fontsize=7)
    cbar.ax.set_title('Accuracy \n', fontsize=9)
    # cbar.set_label('Accuracy', rotation=0, y=1.1, labelpad=-20)
    cbar.set_ticks([0,10,20,30,40,50,60,70,80,90,100] + [np.min(consensus_ratesc), np.max(consensus_ratesc)])
    cbar.set_ticklabels([0,10,20,30,40,50,60,70,80,90,100]+['     min', '     max'])
    cbar.ax.tick_params(labelsize=7)

    plt.show()

一般来说,matplotlib 示例文档 https://matplotlib.org/gallery/index.html#d-plotting是获取可视化灵感的好地方。我的解决方案建立在“将填充轮廓投影到图形上”示例的基础上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在曲面图上绘制等高线? (4D) 的相关文章

  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • Django 1.7+ 相当于 South 的 add_ignored_fields() 是什么?

    回到 Django 的早期版本 我们都使用 South 进行迁移 并且由于它没有我们希望的那么智能 我们有时需要告诉它显式忽略某些字段 因为这些字段太复杂而无法处理 我们这样做是用add ignored fields一切都很顺利 在我们的例
  • 正确地从 DOM 中删除角度组件

    我创建了一个芯片组件 它有一个删除按钮 单击此按钮后 我想从 DOM 中删除整个组件 包括它的包装 HTML 标记 芯片组件 ts Component selector app chips template div class close
  • 在我的 Mac 上制作一个 C 启动器

    我想为我制作的 C 程序制作一个启动器 并且希望它在终端中运行 我该怎么做 我连一丁点的想法都没有 只需创建一个文本文件 将其保存到桌面 例如my C program command 注意 command后缀 然后在文本文件中您可以输入您喜
  • 从右到左的 UI 指南?

    我正在研究对专有 UI 框架 用于桌面应用程序 的 RTL 支持 我想知道 是否有关于如何更改小部件渲染的指南 我正在寻找诸如以下内容的列表 复选框标签位于复选框的左侧 并且右对齐 工具栏按钮从右向左流动 垂直滑块位于左侧 窗户装饰 一般布
  • 用于在 Google 电子表格中保存 URL 的书签

    我想创建一个简单的书签 它获取当前网页 location ref 的 URL 并将其保存在 Google 电子表格中 保存后 我想留在当前网页 我知道写入 Google 电子表格的唯一方法是使用 Google App Script 所以我写
  • JUnit 5 测试套件的 Surefire XML 测试报告

    我刚刚迁移到 JUnit 5 在我的测试套件的 XML 测试报告中看不到任何测试用例 我已经使用 junit platform suite 的新 JUnit 5 语法编写了测试套件 并且套件中的测试均成功运行 这将通过 Surefire 生
  • 为什么“初始化元素不是常量”......不再起作用?

    static const int a 42 static const int b a 我预计这样的代码会出现编译错误 初始值设定项必须是常量表达式或字符串文字 存储在具有以下类型的对象中的值int with const类型限定符不是常量表达
  • Jest 26 和 Angular - 错误行号报告不正确

    自从升级到 Jest 26 和 Angular 10 以来 单元测试错误行号的报告不正确 我从 Angular 4 开始就一直使用 Jest 并且随着每个新版本的升级 我已经阅读了所有关于此的现有文章 并尝试了我能找到的所有建议 它们似乎都
  • 使用 libavcodec 将 .m4a 转换为 PCM

    我正在尝试将 m4a 文件转换为原始 PCM 文件 以便可以在 Audacity 中播放它 根据 AVCodecContext 它是一个使用示例格式 AV SAMPLE FMT FLTP 的 44100 Hz 轨道 据我了解 当使用 avc
  • 如何将 postgres 数据库转换为 SQLite?

    我们正在开发一个网站 当我们在本地开发时 其中一个来自Windows 我们使用sqlite3 但在服务器 linux 上我们使用postgres 我们希望能够将生产数据库导入到我们的开发过程中 所以我想知道是否有一种方法可以将 postgr
  • 如何在asp.net core web API中使用MimeMessage发送带有附件的电子邮件?

    我只尝试过简单的文本 但我想发送带有附件的电子邮件 var emailMessage new MimeMessage emailMessage From Add new MailboxAddress Test email protected
  • http 服务器和来自不同服务器的 Web 套接字

    配置 http 服务器 使用express 和分配给它的套接字服务器 socket io 非常容易 var app require express var http require http Server app var io requir
  • 恢复 git merge,同时允许稍后进行相同的合并)

    恢复已提交的 git merge 同时保留稍后合并同一分支的选项的最佳方法是什么 这是针对当我将分支合并到 HEAD 中 然后决定不希望进行这些更改时的情况目前 但仍然希望可以选择在稍后的某个时刻将它们合并到 HEAD 中 git 恢复 m
  • 选择服务器上的第二个 GPU

    我正在服务器上运行代码 那里有 2 个 GPU 第一个很忙 然而 我找不到在它们之间切换的方法 如果这很重要的话我正在使用 pytorch 应修改以下代码行 device cuda if torch cuda is available el
  • 如何在 lmer 或 glmer 中预测和绘制非线性变化斜率?

    我的目标是使用以下方法从变截距 变斜率多级模型计算预测值lmer and glmer的职能lme4 https cran r project org web packages lme4 index html为了使这一点具体和清晰 我在这里展
  • 避免被网络邮件公司阻止群发/批量发送电子邮件? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们公司每天发送大量电子邮件 并计划将来发送更多 数千 此外 时不时还会有数以万计的大量邮件发送 有人有过 hotmail yahoo web de
  • Docker php:5.6-apache 403(因为路径的某个组件缺少搜索权限)

    文件树 docker compose yml Dockerfile www index html Dockerfile FROM php 5 6 apache ADD www var www html WORKDIR var www htm
  • UITableViewCell中滑动删除有白色背景,需要清除

    我试图更改滑动 UITableViewCell 行时出现的视图的背景颜色 即 删除 按钮后面的背景颜色 我尝试更改 cell editingAccessoryView 但这没有做任何事情 UIView myBackgroundView UI
  • 使用 C# 从梅特勒托利多秤设备读取数据

    我正在使用 C 代码从梅特勒托利多秤设备读取数据 这是我的完整代码 private SerialPort port new SerialPort COM1 4800 Parity None 8 StopBits One public Inw
  • 如何在曲面图上绘制等高线? (4D)

    我想制作一个 4d 图 其中有 X Y Z 作为表面 和 C 显示为该表面上的轮廓 我现在拥有的 我想要什么 我怀疑答案将是一些 Facecolors 或 countourf3d 的技巧 但我似乎无法弄清楚 非常感谢任何帮助 My code