标签: mplot3d

如何在matplotlib中绘制3D补丁集合?

我正在尝试在matplotlib上制作一个3D图,其上有三个圆,每个圆都以原点为中心,半径为1,指向不同的方向 - 例如,用于说明半径为1的球体.

在2D中,我会制作一个圆形补丁集合并将其添加到轴上.在3D中,我很难让补丁显示出来,更不用说将它们定向在不同的方向.

import matplotlib
import matplotlib.pyplot as P
import mpl_toolkits.mplot3d as M3

fig = P.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
circles = matplotlib.collections.PatchCollection(
    [matplotlib.patches.Circle((0, 0), 1) for count in range(3)],
    offsets=(0, 0))
M3.art3d.patch_collection_2d_to_3d(circles, zs=[0], zdir='z')
ax.add_collection(circles)
P.show()
Run Code Online (Sandbox Code Playgroud)

无论我如何旋转绘图,运行此程序都会用蓝色填充整个绘图窗口,即补丁的面部颜色.如果我facecolor='none'PatchCollection()通话中设置,则显示空白Axes3D.

我试过的事情:

  • 如果我使用的是a CircleCollection而不是a PatchCollection,则根本不显示任何补丁.
  • 调用中的zs参数patch_collection_2d_to_3d()是奇数; 我希望放置zs=0(所有三个补丁的一个z坐标)或zs=[0,0,0](每个补丁的一个单独的z坐标),但这两个都抛出一个错误:

    ValueError:使用序列设置数组元素.

  • 以定向补丁不同,我会希望能够通过类似zdir=['x', 'y', 'z']但结果并没有什么不同我是否传递或'z'['z'].

  • 我也希望能够做到ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', …

python matplotlib mplot3d

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

在matplotlib 3D图上反转Z轴

如何逆转3D图的z轴上的顺序(即负向上,正向向下)?下面的代码生成一个底部朝下的圆锥体; 是否有ax.reverse_zlim3d(True)可用于更改刻度顺序的命令(类似于什么?)?

下面的代码绘制了一个底部指向下方的圆锥体.我想颠倒z轴的顺序,以便它的底部朝上,如冰淇淋圆锥,在图形的顶部而不是底部为-1.

from matplotlib import pyplot as p
from mpl_toolkits.mplot3d import Axes3D    # @UnusedImport

import numpy as np
from math import pi, cos, sin

z = np.arange(0, 1, 0.02)
theta = np.arange(0, 2 * pi + pi / 50, pi / 50)

fig = p.figure()
axes1 = fig.add_subplot(111, projection='3d')
for zval in z:
    x = zval * np.array([cos(q) for q in theta])
    y = zval * np.array([sin(q) for q in theta])
    axes1.plot(x, y, -zval, 'b-')
axes1.set_xlabel("x label") …
Run Code Online (Sandbox Code Playgroud)

python matplotlib mplot3d

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

mplot3d动画与透明背景

我想使用matplotlib生成一些透明背景的GIF.我尝试了不同的选项,但我无法获得透明背景的文件.使用当前设置,我得到第一帧,但不是其余的.以下是我的代码

from __future__ import division
from numpy import pi, sin, cos, mgrid
from scipy.special import jn, jn_zeros
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import rcParams


# In Windows the next line should provide the full path to convert.exe
# since convert is a Windows command
rcParams['animation.convert_path'] = "C:\Program Files\ImageMagick-6.9.3\convert.exe"
rcParams['savefig.transparent'] = True
rcParams['savefig.dpi'] = 130
rcParams['savefig.pad_inches'] = 0
plot_args = {'rstride': 1, 'cstride': 1, 'cmap':"RdYlBu",
             'linewidth': 0.5, 'antialiased': True, 'color': '#1e1e1e',
             'shade': …
Run Code Online (Sandbox Code Playgroud)

python matplotlib animated-gif mplot3d

8
推荐指数
1
解决办法
1248
查看次数

绘图顺序的 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或Mayavi中表示以下3D数据?

我有一大堆数据,我试图在3D中表示希望发现一个模式.我花了很长时间阅读,研究和编码,但后来我意识到我的主要问题不是编程,而是实际上选择了一种可视化数据的方法.

Matplotlib的mplot3d提供了很多选项(线框,轮廓,填充轮廓等),MayaVi也是如此.但是有很多选择(每个都有自己的学习曲线),我几乎迷失了,不知道从哪里开始!所以我的问题基本上是你必须处理这些数据时使用哪种绘图方法?

我的数据是基于日期的.对于每个时间点,我绘制一个值(列表'Actual').

但是对于每个时间点,我也有一个上限,一个下限和一个中间点.这些限制和中点基于种子,在不同的平面上.

我希望在我的"实际"读数中发生重大变化时或之前发现该点或识别模式.是在所有飞机的上限都满足时?或者彼此接近?当实际值接触上/中/下限时?是否在一个平面上的Uppers触及另一架飞机的降落时?

在我粘贴的代码中,我将数据集简化为几个元素.我只是使用简单的散点图和线图,但由于数据集的大小(可能是mplot3d的限制?),我无法用它来发现我正在寻找的趋势.

dates = [20110101,20110104,20110105,20110106,20110107,20110108,20110111,20110112]

zAxis0= [       0,       0,       0,       0,       0,       0,       0,       0]
Actual= [    1132,    1184,    1177,     950,    1066,    1098,    1116,    1211]

zAxis1= [       1,       1,       1,       1,       1,       1,       1,       1]
Tops1 = [    1156,    1250,    1156,    1187,    1187,    1187,    1156,    1156]
Mids1 = [    1125,    1187,    1125,    1156,    1156,    1156,    1140,    1140]
Lows1 = [    1093,    1125,    1093,    1125,    1125,    1125,    1125,    1125]

zAxis2= [       2,       2,       2,       2, …
Run Code Online (Sandbox Code Playgroud)

python r matplotlib mayavi mplot3d

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

在matplotlib中为三维箭袋图添加颜色

我希望在我的3d箭袋图中有与颜色图相对应的颜色.2d版本的绘图有一个可选的数组,用于将颜色映射到箭头.如何在3d版本中创建相同的效果?

python numpy matplotlib mplot3d

7
推荐指数
4
解决办法
6694
查看次数

将强度附加到3D绘图

下面的代码生成我测量强度的点的3D图.我希望将强度值附加到每个点,然后在点之间插值,以产生显示高强度和低强度点的颜色图/表面图.

我相信这样做是必要的scipy.interpolate.RectBivariateSpline,但我不确定它是如何工作的 - 因为我所看到的所有例子都没有包括3D图.

编辑:我想将球体显示为表面图,但我不确定我是否可以使用Axes3D因为我的点不均匀分布(即赤道周围的点更靠近)

任何帮助将不胜感激.

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

# Radius of the sphere
r = 0.1648

# Our theta vals
theta = np.array([0.503352956, 1.006705913, 1.510058869,
                  1.631533785, 2.134886741, 2.638239697]) 
# Our phi values
phi = np.array([  np.pi/4,   np.pi/2, 3*np.pi/4,   np.pi,
                5*np.pi/4, 3*np.pi/2, 7*np.pi/4, 2*np.pi])

# Loops over each angle to generate the points on the surface of sphere
def gen_coord():
    x = np.zeros((len(theta), len(phi)), dtype=np.float32)
    y …
Run Code Online (Sandbox Code Playgroud)

python interpolation matplotlib scipy mplot3d

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

如何使用 matplotlib (Axes3D) 高效地绘制大量 3D 椭球体?

我目前正在使用 python 处理应变数据,并使用 matplotlib (v. 1.5.1) 为有限应变椭球体创建各种图形输出。

处理 1000 个椭球体参数非常快(我正在重用此处提供的一些可爱的 python 代码https://github.com/minillinim/ellipsoid/blob/master/ellipsoid.py),但我的工作流程中的瓶颈与在 3D 绘图中绘制大量 3D 对象所需的时间。

下面我附上了一小段 Python 代码,用于计算和绘制一堆随机椭球体。虽然“ellipNumber”很小,但它的作用就像一个魅力。但是,当它达到 100 时,需要更长的时间.. 到了 1000 秒,我敢打赌你将没有耐心等待。

在 2D 中,我知道使用集合是提高性能的方法:如何快速绘制数千个圆圈?

假设集合确实是可行的方法,我四处寻找一个示例,并尝试使用椭圆体坐标填充 Poly3DCollection,就像他们在 3D 中对多边形所做的那样: Plotting 3D Polygons in python-matplotlib,但我没有成功设置基于 2d x、y 和 z 数组的顶点。

任何有关如何提高椭球体绘图性能的建议/评论将不胜感激!

干杯

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



fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')

# number …
Run Code Online (Sandbox Code Playgroud)

python matplotlib python-2.7 mplot3d

7
推荐指数
0
解决办法
4892
查看次数

正确设置 3d 图中的轴限制

我在 matplotlib 中为 3d 图设置限制时遇到问题;我发现无论我如何设置 x、y 和 z 轴的限制,3dplots 的绘图例程都会添加额外的缓冲区。

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

fig = plt.figure() 
ax = fig.add_subplot(111,projection='3d') 
ax.axes.set_xlim3d(left=0, right=10) 
ax.axes.set_ylim3d(bottom=0, top=10) 
ax.axes.set_zlim3d(bottom=0, top=10) 
plt.show()
Run Code Online (Sandbox Code Playgroud)

这会产生以下图:

3d 轴图像

正如您所看到的,限制应该位于 x, y, z = {0, 10},但是 3D 绘图总是向每个边缘添加一点缓冲区。有谁知道如何关闭此效果?

我还使用过 plt.xlims(); 和 ax.axes.set_xlims() 但它们产生相同的效果。

python axis matplotlib mplot3d matplotlib-3d

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

在matplot lib中绘制3D凸起闭合区域

我试图在3D中绘制由一组不等式定义的多面体.基本上,我尝试在matplotlib中重现这个matlab plotregion库的功能.

我的方法是获取交叉点顶点,构造它们的凸包,然后获取并绘制结果面(单纯形).

问题在于许多单纯形是共面的,并且它们无缘无故地使得情节非常繁忙(参见下图中的所有这些对角线边缘).

是否有任何简单的方法来打印多面体的"外部"边缘,而不必一个接一个地整合所有共面的单纯形?

谢谢

from scipy.spatial import HalfspaceIntersection
from scipy.spatial import ConvexHull
import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as a3
import matplotlib.colors as colors


w = np.array([1., 1., 1.])


# ?? h? w? q? - ?? g? w? <= 0 
#  q? - ub? <= 0
# -q? + lb? <= 0 
halfspaces = np.array([
                    [1.*w[0], 1.*w[1], 1.*w[2], -10 ],
                    [ 1.,  0.,  0., -4],
                    [ 0.,  1.,  0., …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib scipy mplot3d

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