【问题标题】:3D Plotting region fulfilling inequalities in matplotlib在 matplotlib 中实现不等式的 3D 绘图区域
【发布时间】:2020-05-11 14:28:45
【问题描述】:

希望在 3D 空间中为满足不等式集的区域着色:

x^2 < -2*x*y*z

y^2 < -2*x*y*z

z 在 [0,1] 之间运行。

这可以在 Mathematica 中使用代码完成

RegionPlot3D[
x^2 < -2*x*y*z && y^2 <- 2*x*y*z,  {x, -1, 1}, {y, -1, 1}, {z, 0, 1}, 
PlotPoints -> 100] 

我想知道如何在 matplotlib 中做到这一点。

3D plot

【问题讨论】:

  • 对于这样的问题(即解决特定的编码问题),最好向我们展示您为解决它所做的工作。这有助于您发布一个明确的问题,并帮助我们编写一个朝着正确方向发展的解决方案。

标签: python matplotlib plot 3d


【解决方案1】:

我发现这个问题正在寻找相同问题的答案!

由于还没有人回答,我可以建议您使用 Plotly 进行 3D 或仅使用 MatPlotLib 进行 2D 并制作我所谓的“积分技巧”:只需越过轴并在坐标处放置一个散点图点满足不等式。

我建议 Plotly 用于 3D,因为如果您在 MatPlotLib 中绘制许多点,当您旋转绘图时它的工作速度会非常慢。

对于您的情节,我们可以编写以下内容:

import plotly.express as px
import numpy

data_x = []
data_y = []
data_z = []
for z in numpy.arange(0, 1, 0.01):
    for x in numpy.arange(-1, 1, 0.01):
        for y in numpy.arange(-1, 1, 0.01):
            if x**2 < -2*x*y*z and y**2 <- 2*x*y*z:
                data_x.append(x)
                data_y.append(y)
                data_z.append(z)


fig = px.scatter_3d(x=data_x, y=data_y, z=data_z, opacity=0.3)
fig.show()

虽然它只是一个近似实体,但它还是有帮助的。

不过,从技术上讲,这并不是一件简单的事情,因为您需要根据区域来描述网格。事实证明,您至少需要找到实体的角。所以,Mathematica 有一个很好的功能,但要在 Python 中实现同样的功能,我们似乎需要动手。

【讨论】:

  • 嗨,我更新了我的答案,以便代码输出您询问的实体。
  • 这个解决方案也可以在 matplotlib 中使用 'fig = plt.figure()' 'ax = fig.gca(projection='3d')' 'ax.scatter(data_x, data_y, data_z ,marker = 'o',s = 1 ,alpha = 0.01)' 'plt.show()'
  • @tmldwn 是的,当然!但是,虽然这可能只是我的问题,但当您旋转生成的绘图时,具有许多点的 matplotlib 3d 绘图的工作速度非常慢。因此我建议 Plotly - 即使有几万个散点,它也能快速运行。
  • 之所以如此,是因为据我所知,matplotlib 是用 CPU 渲染器实现的,而 plotlify 使用 WebGL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多