在 matplotlib 中显示表面前面的轮廓

2023-11-30

我一直在寻找答案,但我似乎不明白为什么在我的代码中我无法让投影轮廓显示在表面“后面”。

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

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.array([[200,800,1500,2000,3000],[200,700,1500,2000,3000],[200,800,1500,2000,3000],[200,800,1500,2000,3000]])
Y = np.array([[50,50,50,50,50],[350,350,350,350,350],[500,500,500,500,500],[1000,1000,1000,1000,1000]])
Z = np.array([[0,0,33,64,71],[44,62,69,74,76],[59,67,72,75,77],[63,68,73,76,77]])

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.5)
cset = ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='x', offset=200, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='y', offset=1000, cmap=cm.coolwarm)

ax.set_xlabel('X')
ax.set_xlim(200, 3000)
ax.set_ylabel('Y')
ax.set_ylim(0, 1000)
ax.set_zlabel('Z')
ax.set_zlim(0, 100)

plt.show()

我一直在使用此页面中的填充轮廓图之一作为模板:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots

目前我能得到的最好的办法就是改变轮廓的阿尔法值。我还尝试在轮廓之后绘制曲面,但这并没有改变任何东西。

任何建议将非常受欢迎!


您遇到的问题是众所周知的bug/缺少功能在 matplotlib 中。引用matplotlib 的联合首席开发人员:

据我了解,所有 3D 绘图都是一种黑客行为。

问题归结为连续的曲面块是一个接一个地绘制的,这样每个曲面要么完全位于其他曲面的后面,要么完全位于其他曲面的前面。这意味着任何两个对象只能从某些角度正确绘制,并且不能保证所有对象都将以合理的兴趣角度以正确的顺序绘制。

人们会认为这样的设定zorder各种对象的属性可能会影响结果,但是不是这种情况, since

分割绘图的原因是“上方”和“下方”是以某种神秘的方式确定的

换句话说

Axes3D 忽略 zorder 并按照它认为应该的顺序绘制艺术家。

这体现在各种 3D 绘图中,例如当用曲面绘制文本, 绘制复杂曲面, 甚至绘制 3d 条形图(尽管人们可能期望在单个函数调用中更容易确定绘图顺序)。

对于使用单个命令绘制的曲面(即包含单个命令的曲面)Poly3DCollection)你可以使用set_zsort()方法向 matplotlib 提供有关首选绘图顺序的非常粗略的提示。除此之外,您唯一的选择是以问题不可见或至少不完全明显的方式移动表面和视角(如果可能的话)。 @tcaswell 提出的另一个选择是使用 Mayavi而不是 mplot3d (但我自己从未这样做过)。

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

在 matplotlib 中显示表面前面的轮廓 的相关文章

随机推荐

  • ASP MVC 将值传递到模态窗口

    我有一个带有模态窗口的视图 当我点击打开模态窗口时 我想传递参数item InstrumentId进入模式窗口 以便我可以单击一个链接 将我重定向到属于 InstrumentId 的特定仪器的页面 我在下面所做的成功地将 Instrumen
  • 按日期对多列重新排序和重新分组

    我对此有点困惑 希望得到一些帮助 这是我的数据 Col A Col B Col C Col D Col E Col F FRANCE ITALY DATE Installs Uninstalls DATE Installs Uninstal
  • 在 C++ 中设置单独的位[重复]

    这个问题在这里已经有答案了 我有一个 5 字节数据元素 我需要一些帮助来弄清楚如何在 C 中设置这些字节之一的单个位 请参阅下面我的示例代码 char m TxBuf 4 我想将位 2 设置为字节的高位m TxBuf 1 00000 0 0
  • Android 中通过触摸事件进行反向地理编码

    我通过此堆栈溢出浏览了几篇文章以及其他与反向地理编码相关的文章 我打算从触摸事件中查找具有给定纬度和经度的地点的名称 我从触摸事件中获取了纬度和经度 但无法从该地理坐标中获取地址 它传递异常而不是在尝试区域中 这是代码 public boo
  • 在 Objective C 中检测 PNG 文件是否损坏

    我正在使用 NSURLRequest 下载 jpg 和 png 这工作正常 但有时文件会损坏 我见过捕获错误 损坏的 JPEG 数据 数据段过早结束并使其适用于 jpg 有谁知道对 png 做同样的事情的方法吗 即以编程方式检查 png 数
  • 使用 event.which 来验证用户是否按下空格键在 Firefox 中不起作用

    我想要一个脚本来验证按下的键是否是 空格键 键码 32 我注意到 IE 使用其他函数名称 我尝试了很多在这里找到的解决方案 event event window event IE does not pass event to the fun
  • 如何使用C#读取从asp.net页面传递的参数?

    我是 ASP net 新手 如何读取从 ASP net 页面传递的参数 任何小例子都会受到赞赏 这对我来说只是一个开始 使用您的示例 URL string id Request QueryString id string nam Reque
  • Spring Cloud Gateway转发客户端证书

    我正在尝试将 spring cloud gateway 用于基于 spring boot 的服务 该服务使用 ssl 和客户端身份验证 问题是 通过 api 网关从客户端调用服务总是失败 并显示 certificate unknown 没有
  • Phonegap 视频捕捉崩溃

    我制作了一个相对简单的phonegap应用程序 能够捕获图像和视频并将其上传到服务器 图像工作正常 但是当我调用捕获视频时 会出现相机 UI 当我接受视频时 应用程序崩溃并在 logcat 中出现以下错误 java lang Runtime
  • :touch CSS 伪类或类似的东西?

    我正在尝试制作一个按钮 这样当用户单击它时 它会在按住鼠标按钮的同时更改其样式 如果在移动浏览器中触摸它 我还希望它以类似的方式改变其样式 对我来说 看似显而易见的事情是使用 CSS active 伪类 但这不起作用 我尝试过 focus
  • R SHINY - 条件面板输出偏移?

    这篇文章是相关的R闪亮 复选框和条件面板问题 我在这里成功地创建了该问题的 MRE 再次总结一下 当单击第二个复选框或同时单击第一个和第二个复选框时 数据帧输出会发生移动 我希望它显示在与单击时相同的位置第一个复选框 library shi
  • 使用 Qt 中的命名参数列表发出 HTTP POST 请求

    我需要从 Qt 应用程序向服务器发出 HTTP POST 请求 POST 请求将包含命名值列表 即键 值对 它们主要是字母数字字符串 但可以包含特殊字符 例如引号 空格等 在 Qt 中执行此类 POST 请求的规范方法是什么 当前答案适用于
  • 将 Swift 数组转换为 NSData 以进行 NSUserDefaults.StandardUserDefaults 持久存储

    我正在尝试通过制作一个小应用程序来了解 Swift 在相对熟悉 Obj C 之后 我想使用 NSUserDefaults 持久保存少量数据 但我遇到了问题 我初始化一个空的元组数组 如下所示 var costCategoryArray na
  • 无法将 Ruby on Rails 连接到远程 mysql 数据库

    我正在尝试将我的rails 3应用程序连接到godaddy服务器上托管的mysql数据库 我可以使用 mysql 客户端进行远程连接 但在运行应用程序时却无法进行连接 我能够连接本地 mysql 但是当我尝试连接到远程托管数据库时 出现此错
  • 由于编码问题,WebClient.DownloadString 导致字符损坏,但浏览器正常

    下面的代码 var text new WebClient DownloadString http export arxiv org api query search query au Freidel L start 0 max result
  • Pandas - 当字符串与格式匹配时出现“时间数据与格式不匹配”​​错误?

    我收到一个值错误 指出我的数据与格式不匹配 不确定这是一个错误还是我在这里遗漏了一些东西 我指的是本文档对于字符串格式 奇怪的部分是 如果我将 数据 Dataframe 写入 csv 并读取它 然后调用下面的函数将转换日期 所以我不确定为什
  • php 邮件功能不发送电子邮件/发送电子邮件花费太长时间

    我有一个机架空间云 我想在其中设置 LAMP 服务器有CentOS 我安装了sendmail并且php邮件功能使用这个 但是使用php邮件功能发送电子邮件需要很长时间
  • Spark SQL - 转义查询字符串

    我不敢相信我会问这个但是 如何使用 SCALA 在 SPARK SQL 中转义 SQL 查询字符串 我已经厌倦了一切 到处寻找 我认为 apache commons 库可以做到这一点 但没有运气 import org apache comm
  • 如何更改 Handsontable 中已更改单元格的颜色?

    我正在使用 Handsontable 插件 当用户更改单元格中的值时 它应该变成黄色 以便他们可以跟踪更改的内容 在本例中 黄色是类 changeInput 棘手的部分是 当您双击单元格进行更改时 它会变成文本区域 而不再是 td 有任何想
  • 在 matplotlib 中显示表面前面的轮廓

    我一直在寻找答案 但我似乎不明白为什么在我的代码中我无法让投影轮廓显示在表面 后面 from mpl toolkits mplot3d import axes3d import matplotlib pyplot as plt from m