相关疑难解决方法(0)

在matplotlib中显示最大表面?

我正在使用matplotlib在同一个图上绘制多个曲面,我想只看到最顶层的曲面,就像matlab所示.

Matlab 3D视图: Matlab 3D视图

Matlab顶视图: Matlab顶视图

Matplotlib 3D视图: Matplotlib 3D视图

Matplotlib顶视图: Matplotlib顶视图

我怎样才能让Matplotlib显示类似于Matlab的结果,其中最顶层的类显示在顶部,而不是一个类优先于另一个?

matlab plot matplotlib surface

18
推荐指数
2
解决办法
1873
查看次数

将散点图与曲面图结合起来

如何将3D散点图与3D曲面图结合起来,同时保持曲面图透明,这样我仍然可以看到所有点?

python scatter matplotlib geometry-surface

12
推荐指数
2
解决办法
2万
查看次数

如何在matplotlib中隐藏表面图后面的一条线?

我想通过球体表面上的色彩映射使用Matplotlib绘制数据.另外,我想添加一个3D线图.我到目前为止的代码是这样的:

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


NPoints_Phi         = 30
NPoints_Theta       = 30

radius              = 1
pi                  = np.pi
cos                 = np.cos
sin                 = np.sin

phi_array           = ((np.linspace(0, 1, NPoints_Phi))**1) * 2*pi
theta_array         = (np.linspace(0, 1, NPoints_Theta) **1) * pi


phi, theta          = np.meshgrid(phi_array, theta_array) 


x_coord             = radius*sin(theta)*cos(phi)
y_coord             = radius*sin(theta)*sin(phi)
z_coord             = radius*cos(theta)


#Make colormap the fourth dimension
color_dimension     = x_coord 
minn, maxx          = color_dimension.min(), color_dimension.max()
norm                = matplotlib.colors.Normalize(minn, maxx)
m …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib mayavi

11
推荐指数
1
解决办法
1839
查看次数

在曲面图上画线

我希望能够看到 3D 表面上的线(和点)位于表面顶部(第二张图像),而不是后面(第一张图像)。这是我的 3D 函数:

def f(x, y): 
    return np.sin(2*x) * np.cos(2*y)
Run Code Online (Sandbox Code Playgroud)

3D 表面的 X、Y、Z:

x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
Run Code Online (Sandbox Code Playgroud)

我生成了 x 点 (xx) 和 y 点 (yy) 的向量,其中 zz = f(xx,yy)

fig = plt.figure(figsize=(8,6))
ax = plt.axes(projection='3d')
ax.scatter(xx, yy, zz, c='r', marker='o')
#ax.plot(xx,yy,zz, c= 'r')

ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                cmap='viridis', edgecolor='none')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如你所看到的,点在图后面,图形覆盖了点。我想看看情节上的要点。我应该怎么办?

我希望能够看到像这样的点和线:

在此输入图像描述

编辑:这是我生成点的方式:

for i in range(1,2000):
    [a, b] =  np.random.rand(2,1)*np.sign(np.random.randn(2,1))*2
    xx = …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib matplotlib-3d

9
推荐指数
1
解决办法
1万
查看次数

绘图顺序的 Matplotlib 3D 解决方法

我知道 matplotlib 3D 对于以正确的顺序绘制多个 3D 对象(平面、线、点)是不可靠的:请参阅Matplotlib 3D plot zorder 问题如何绘制相交平面?. 然而这些问题似乎很老,所以提出了解决方案。因此,我想知道是否有针对以下特定简单场景的一些新开发、工具、变通方法或硬编码解决方案:

import mpl_toolkits.mplot3d as a3
import matplotlib.pylab as plt
import numpy as np    

fig = plt.figure()
ax = a3.Axes3D(fig)

# create an orizontal plane
corners = [[0,0,0],[0,5,0],[5,5,0],[5,0,0]]
tri = a3.art3d.Poly3DCollection([corners], alpha=1)
tri.set_color('w')
tri.set_edgecolor('k')
ax.add_collection3d(tri)

# plot a vector
ax.plot([2,2],[2,2],[0,4], c = 'r')

# plot some points
ax.scatter([1,3],[1,3],[1,3], c = 'r')

ax.set_xlim([0, 5.0])
ax.set_ylim([0, 5.0])
ax.set_zlim([0, 2.5]);

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此图像中,您可以看到可视化问题:向量不是从平面开始,因为它的初始点是 (2,2,0)

在此图像中,您可以看到可视化问题:向量不是从平面开始,因为它的初始点是 (2,2,0)

python matplotlib mplot3d

8
推荐指数
0
解决办法
2182
查看次数

Matplotlib plot_surface transparency artefact

我试图从一组指定z值的数据中绘制3D表面.虽然我设置了alpha = 1.0,但我得到了一些奇怪的透明效果,我可以在表面看到.

在绘图时和保存到文件时(包括png和pdf)都会出现人工制品: 在此输入图像描述

我试过改变线宽,并将步幅数从1改为10(在后一种情况下,由于分辨率太粗糙,表面不可见).

问:我怎样才能摆脱这种透明度?

这是我的代码:

import sys
import numpy as np
import numpy.ma as ma
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

y_label = r'x'
x_label = r'y'
z_label = r'z'

x_scale = 2.0*np.pi
y_scale = 2.0*np.pi

y_numPoints = 250
x_numPoints = 250

def quasiCrystal(x, y):
    z = 0
    for i in range(0,5):
        z += np.sin(x * np.cos(float(i)*np.pi/5.0) +
                    y * np.sin(float(i)*np.pi/5.0))
    return z

x = np.linspace(-x_scale, x_scale, x_numPoints)
y = np.linspace(-y_scale, y_scale, …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib

7
推荐指数
2
解决办法
1万
查看次数

在 3D Matplotlib 中仅绘制一个点

我正在尝试绘制具有 3 个平面的线性系统的解,解是点 (1,1,1) 我已经使用 point 命令绘制了该点,但我怀疑该点不在正确的位置:

\n\n
ax.plot([1.], [1.], [1.], markerfacecolor=\'k\', markeredgecolor=\'k\', marker=\'o\', markersize=5, alpha=0.6)\n
Run Code Online (Sandbox Code Playgroud)\n\n

谢谢\n好的,代码是:

\n\n
#/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\nfrom sympy.solvers import *\nfrom sympy import *\nfrom matplotlib import rcParams\n\n\n# Activating LateX\nrcParams[\'text.latex.unicode\'] = True\nrcParams[\'text.usetex\'] = True\nrcParams[\'text.latex.preamble\'] = \'\\\\usepackage{amsthm}\', \'\\\\usepackage{amsmath}\', \'\\\\usepackage{amssymb}\',\n\'\\\\usepackage{amsfonts}\', \'\\\\usepackage[T1]{fontenc}\', \'\\\\usepackage[utf8]{inputenc}\'\n\n\n# Declaring the three planes as functions\nf1 = lambda x, y: x + y -1\nf2 = lambda x, y: 1 - x + y\nf3 = lambda …
Run Code Online (Sandbox Code Playgroud)

matplotlib

5
推荐指数
1
解决办法
1万
查看次数

在matplotlib中的Surface前面显示轮廓

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

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()
Run Code Online (Sandbox Code Playgroud)

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

python matplotlib surface python-2.7

5
推荐指数
1
解决办法
726
查看次数

如何从Python中的一组线性方程中绘制平面?

我有一个带有三个方程的线性系统:

x 1 - 2x 2 + x 3 = 0
2x 2 - 8x 3 = 8
-4x 1 + 5x 2 + 9x 3 = -9

解集是(29,16,3),它是这些平面交叉处的点.

希望是否有人可以使用Matplotlib在3D空间中绘制这些平面,以清楚地显示问题.

python matplotlib linear-algebra

2
推荐指数
1
解决办法
1万
查看次数

matplotlib无法正确显示3D平面的交集

我想绘制两个平面并找到它们的交叉线,但是我得到了这个结果,因为一个平面覆盖了另一个平面,所以无法分辨它们相交的位置.

3D投影应隐藏平面的不可见部分,如何使用matplotlib获得此结果?

飞机

你可以清楚地看到这些平原应该相交.

平面相交

这是我用来获得这个结果的代码

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

values = range(-10, 11)

def plotPlane(plot, normal, d, values, colorName):
    # x, y, z
    x, y = np.meshgrid(values, values)
    z = (-normal[0] * x - normal[1] * y - d) * 1. / normal[2]

    # draw plot
    plot.plot_surface(x, y, z, color=colorName)

image = plt.figure().gca(projection='3d')

plotPlane(image, [3, 2, -4], 1, values, "red")
plotPlane(image, [5, -1, 2], 4, values, "gray")

plt.show()
Run Code Online (Sandbox Code Playgroud)

python 3d matplotlib

2
推荐指数
2
解决办法
3305
查看次数