我有一组 3D 点,我使用 scipy.spatial.Delaunay 来进行三角剖分/四面体化。我现在有一组所有四面体的独特面,并希望在 3D 中可视化这些面。
是否有任何 Python 库(或带有 Python 包装器的库)可以做到这一点?
当我尝试使用平移和缩放工具时,绘图会在左键单击时旋转并在右键单击时从中心缩放。通过选择矩形来缩放绘图不起作用。有人知道如何解决这个问题吗?
我有时会因为 matplotlib 的 mplot3d 中缺少某些渲染功能而感到沮丧。在大多数情况下,我确实发现我可以在 mayavi 中得到我想要的东西,但是 matplotlib 3d 轴仍然更可取,如果只是为了美观,比如 LaTeX 化的标签和与我的其他图形的视觉一致性。
我的问题是关于明显的 hack:是否可以在没有轴的情况下在 Mayavi 中绘制一些 3d 对象(表面或 3d 散点图或其他),导出该图像,然后将其放置在具有正确大小、方向、坐标的 matplotlib Axes3D 中投影等?任何人都可以想出实现这一目标需要什么的大纲,或者甚至提供一个框架解决方案?
前段时间我摆弄了这个,发现我在导出透明背景 mayavi 图形并将其放置在空的 matplotlib Axes3D(带有刻度、标签等)方面没有问题,但我并没有得到什么mayavi 和 matplotlib 的相机配置相匹配。简单地将方位角、仰角和距离这三个常用参数在两种环境中设置为相等并不能解决问题;大概需要的是对渲染整个场景的透视(或其他)变换进行一些考虑,而我在该领域相当无能为力。
看起来这可能有用:http : //docs.enthought.com/mayavi/mayavi/auto/example_mlab_3D_to_2D.html
我有一个令人沮丧的问题,只有在3D轴上绘制填充的等高线图时才会显示,并且仅在某些情况下.
以下是我遇到的问题的示例:
和
这些是不同轮廓间隔的相同数据.您会注意到域的左侧发生了错误填充.这是一个Z点通过绘图命令压缩到Z = 0平面的图
ax3d.contourf(X, Y, dbz[z25,:,:], zdir='z', offset=0, levels=levels, cmap='pymeteo_radar', alpha=0.50)
Run Code Online (Sandbox Code Playgroud)
无论使用alpha级别或色彩映射,都会发生错误纠正,但对级别数量敏感.使用zdir和offset不影响错误轮廓(假象只发生在Z表面上.如果我没有填充轮廓,就没有错误轮廓.我也可以改变域有时会使问题更好(或更糟糕的是,但我在同一个域内有许多图表,所以这不是一个修复.
在2D轴上绘制相同数据时不会发生此问题,例如:
该图上有一些额外的数据,但您可以看到填充的轮廓线不会因误填充在3d轴上发生的轮廓而产生相同的伪影.
下面是您可以运行以重现该问题的脚本.
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
data=np.array([[53.9751, 51.5681, 50.7119, 51.1049, 51.5339, 51.4977, 51.2387,50.761, 50.1732, 49.8218, 49.5442, 48.936, 47.4498, 46.6484, 45.8542, 45.136, 44.5268, 44.071, 43.7665, 43.5928, 43.5269, 43.5385, 43.6053, 45.565, 47.0071, 46.8664, 47.372, 47.8324, 48.295, 48.731, 49.0522, 49.4001, 49.7111, 49.9919, 50.2527, 50.4928, 50.7135, 50.8831, 51.0806, 51.2683 ],
[55.6671, 52.53, 50.7764, 50.5632, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ax.scatter绘制三维散射图.我已经从拟合文件中读取数据,并将三列中存储的数据读入x,y,z.我确保x,y,z数据大小相同.z已在0和1之间进行了正常化.
import numpy as np
import matplotlib
from matplotlib import pylab,mlab,pyplot,cm
plt = pyplot
import pyfits as pf
from mpl_toolkits.mplot3d import Axes3D
import fitsio
data = fitsio.read("xxx.fits")
x=data["x"]
y=data["y"]
z=data["z"]
z = (z-np.nanmin(z)) /(np.nanmax(z) - np.nanmin(z))
Cen3D = plt.figure()
ax = Cen3D.add_subplot(111, projection='3d')
cmap=cm.ScalarMappable(norm=z, cmap=plt.get_cmap('hot'))
ax.scatter(x,y,z,zdir=u'z',cmap=cmap)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想要实现的是使用颜色来指示z的大小.像更高的z值会变得更暗.但是我不断得到没有我想要的色彩图的情节,它们都是相同的默认蓝色.我做错了什么?谢谢.
我有一个vertices形状 (N,3) 的 numpy 数组,其中包含 3D 球形多边形的 N 个顶点,即所有这些点都位于球体的表面上。球体的中心和半径已知(以单位球体为例)。我想绘制由这些顶点包围的球形多边形。(从数学上来说,我想绘制这些顶点生成的球凸包)。
我该如何使用 来做到这一点matplotlib?我尝试过Poly3DCollection,但这只绘制了欧几里得多边形。plot_surface我设法用这样的方法绘制了整个单位球体:
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=5, cstride=5, color='y', alpha=0.1)
Run Code Online (Sandbox Code Playgroud)
我想人们可以手动计算要从中删除哪些点x, y, z,然后仍然使用这些点plot_surface来绘制多边形。这是正确的使用方法matplotlib还是它有另一个我可以直接使用的模块?
如果没有方便的方法来做到这一点matplotlib,你能推荐任何其他库吗?
我使用 Matplotlib 在 python 中创建了一个可爱的 3D 位移矢量场,我对结果很满意。然而,从视觉上看不是很东,只能看到位移的大小方向。在 python 中有没有一种方法可以为箭头使用色标,以便位移的大小更清晰/更明显。
这是我到目前为止
#%% Import Libraries
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
#%% Import tsv file of results
path = 'W:/Scott/Continuous_DIC_Results/A35_L7-8_500x500x1000/'
name = 'Z=-5,200,-20,20,spm100'
results = np.loadtxt(path+name+'.tsv', dtype=float, comments='#', delimiter=None, converters=None, skiprows=1, usecols=(1,2,3,4,5,6), unpack=False, ndmin=0)
Z,Y,X = results[:,0], results[:,1],results[:,2]
dz,dy,dx = results[:,3],results[:,4],results[:,5]
#%% Plot Displacement Field
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.quiver(X, Y, Z, dx, dy, dz, # data
length=20, # arrow length
color='Tomato' # arrow …Run Code Online (Sandbox Code Playgroud) 0.90000000 0.90000000 -2133.80472139
0.90000000 0.95000000 -2133.84134433
...
1.87500000 1.82500000 -2133.96171262
1.87500000 1.87500000 -2133.95550450
Run Code Online (Sandbox Code Playgroud)
使用以下代码,我部分成功了。但是,我无法在 xy、xz 和 yz 平面上绘制轮廓。我不得不使用 plot_trisurf 因为 plot_surface 选项不适用于此数据(我真的不知道为什么)。创建 np.meshgrid 没有帮助(在将列表转换为 np.array 之后)。
import numpy as np
import sys
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
filename = sys.argv[1]
with open(filename+'.dat', 'r') as f:
x = []
y = []
z = []
for line in f:
data = line.split()
x.append((float(data[0])))
y.append((float(data[1])))
z.append((float(data[2])))
zz = [627.503*(i+2134.070983645239) for …Run Code Online (Sandbox Code Playgroud) 我正在使用 mpl_toolkits 库中的 mplot3d。当在图形上显示 3D 表面时,我意识到轴没有按照我希望的方式定位。
让我展示一下,我已将每个轴的位置添加到以下屏幕截图中:
有没有办法改变轴的位置以获得这个结果:
这是工作代码:
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(plt.figure())
def f(x,y) :
return -x**2 - y**2
X = np.arange(-1, 1, 0.02)
Y = np.arange(-1, 1, 0.02)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
ax.plot_surface(X, Y, Z, alpha=0.5)
# Hide axes ticks
ax.set_xticks([-1,1])
ax.set_yticks([-1,1])
ax.set_zticks([-2,0])
ax.set_yticklabels([-1,1],rotation=-15, va='center', ha='right')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我尝试过使用xaxis.set_ticks_position('left')声明,但它不起作用。
我需要使用 matplotlib 中的 2 个特征绘制具有多个线性回归的 3D 图。我怎样才能做到这一点?
这是我的代码:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
Run Code Online (Sandbox Code Playgroud) mplot3d ×10
python ×9
matplotlib ×8
plot ×3
mayavi ×2
3d ×1
colormap ×1
contour ×1
convex-hull ×1
python-3.x ×1
scipy ×1
surface ×1
vtk ×1