我想构建实验数据的3D表示来跟踪膜的变形.实验上,只知道角节点.但是,我想绘制整体结构的信息,这就是为什么我要插入膜来实现它的漂亮色彩图.通过搜索,我几乎接近它与以下代码:
import numpy
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
from matplotlib import cm
from scipy.interpolate import griddata
x=numpy.array([0, 0, 1, 1])
y=numpy.array([0.5, 0.75, 1, 0.5])
z=numpy.array([0, 0.5, 1,0])
fig = plt.figure()
ax = Axes3D(fig)
verts = [zip(x, y, z)]
PC = Poly3DCollection(verts)
ax.add_collection3d(PC)
xi = numpy.linspace(x.min(),x.max(),20)
yi = numpy.linspace(y.min(),y.max(),20)
zi = griddata((x,y),z, (xi[None,:], yi[:,None]), method='linear')
xig, yig = numpy.meshgrid(xi, -yi)
ax.plot_surface(xig, yig, zi, rstride=1, cstride=1, linewidth=0,cmap=plt.cm.jet,norm=plt.Normalize(vmax=abs(yi).max(), vmin=-abs(yi).max()))
plt.show()
Run Code Online (Sandbox Code Playgroud)
得到以下情节:

蓝色多边形是其角节点已知的表面,我想要进行颜色映射.到目前为止,色彩映射表面是我最好的结果.然而,表面顶部附近的黑色多边形令我不安.我想这可能是因为表面不适合网格,所以第四个角落就是Nan.
是否有一种解决方法可以避免这些黑色三角形,甚至更好的方法是对仅由角节点知道的表面进行颜色映射?
编辑:这是我的第一个评论中使用以下命令给出的三角测量解决方案的图
triang = …Run Code Online (Sandbox Code Playgroud) 我正在使用双轴和科学符号绘制一些曲线.我为标签设置了一些颜色,但设置似乎不影响其轴的科学记数法的功率指示器.有什么伎俩吗?
这是我的代码:
fig = pylab.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
# Plotting the data
plot_ax1, = ax1.plot()
plot_ax2, = ax2.plot()
# Setting the label colors
ax2.yaxis.set_offset_position('right') # To set the power indicator of ax2
ax1.yaxis.label.set_color(plot_ax1.get_color())
ax2.yaxis.label.set_color(plot_ax2.get_color())
# Setting the ticker properties
tkw = dict(size=4, width=1.5)
ax1.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
ax1.tick_params(axis='y', colors=plot_ax1.get_color(), **tkw)
ax2.tick_params(axis='y', colors=plot_ax2.get_color(), **tkw)
ax1.tick_params(axis='x', **tkw)
# Setting the legend
lines = [plot_ax1, plot_ax2]
ax1.legend(lines, [l.get_label() for l in lines],'upper left')
Run Code Online (Sandbox Code Playgroud) 我试图绘制一些实验数据,我正面临三角测量问题,这里解释得比较长.我发现解决方案可能是将网格从xy更改为xz,并使用y作为高程.
但是我没有关于这种可能性的信息.那么有没有办法这样做,可能通过使用一些掩码或一些过滤器来反转y和z列进行三角测量?
这是一个基本代码:
import numpy
from mayavi import mlab
X2 = numpy.array([0, 0, 1, 1])
Y2 = numpy.array([0.5, 0.45, 1, 0.5])
Z2 = numpy.array([0, 1, 0.5,0])
fig = mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5))
# Define the points in 3D space
# including color code based on Z coordinate.
pts = mlab.points3d(X2, Y2, Z2, Y2, colormap='jet')
# Triangulate based on X, Y with Delaunay 2D algorithm.
# Save resulting triangulation.
mesh = mlab.pipeline.delaunay2d(pts)
# Remove the point …Run Code Online (Sandbox Code Playgroud) 我试图围绕X轴旋转我的数据.我发现我应该使用mayavi.tools.pipeline.transform_data函数,但我无法找到使用它的方法...
我需要将旋转矩阵应用于数据,但我无法想象如何使用该函数...任何提示?