python三维绘图 画长方体_Python Matplotlib绘制长方体

A、 使用Poly3DCollection

一个选择是创建一个长方体的面Poly3DCollection。由于相同收藏的艺术家不存在重叠的问题,这可能是最好的目的在这里。在from mpl_toolkits.mplot3d import Axes3D

from mpl_toolkits.mplot3d.art3d import Poly3DCollection

import numpy as np

import matplotlib.pyplot as plt

def cuboid_data2(o, size=(1,1,1)):

X = [[[0, 1, 0], [0, 0, 0], [1, 0, 0], [1, 1, 0]],

[[0, 0, 0], [0, 0, 1], [1, 0, 1], [1, 0, 0]],

[[1, 0, 1], [1, 0, 0], [1, 1, 0], [1, 1, 1]],

[[0, 0, 1], [0, 0, 0], [0, 1, 0], [0, 1, 1]],

[[0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 1, 0]],

[[0, 1, 1], [0, 0, 1], [1, 0, 1], [1, 1, 1]]]

X = np.array(X).astype(float)

for i in range(3):

X[:,:,i] *= size[i]

X += np.array(o)

return X

def plotCubeAt2(positions,sizes=None,colors=None, **kwargs):

if not isinstance(colors,(list,np.ndarray)): colors=["C0"]*len(positions)

if not isinstance(sizes,(list,np.ndarray)): sizes=[(1,1,1)]*len(positions)

g = []

for p,s,c in zip(positions,sizes,colors):

g.append( cuboid_data2(p, size=s) )

return Poly3DCollection(np.concatenate(g),

facecolors=np.repeat(colors,6), **kwargs)

positions = [(-3,5,-2),(1,7,1)]

sizes = [(4,5,3), (3,3,7)]

colors = ["crimson","limegreen"]

fig = plt.figure()

ax = fig.gca(projection='3d')

ax.set_aspect('equal')

pc = plotCubeAt2(positions,sizes,colors=colors, edgecolor="k")

ax.add_collection3d(pc)

ax.set_xlim([-4,6])

ax.set_ylim([4,13])

ax.set_zlim([-3,9])

plt.show()

e3VBn.png

B、 使用plot_surface

根据this question调整解决方案,该方案使用plot_surface,并根据需要允许不同的大小,这在大多数情况下都很好:

^{pr2}$

qItlA.png


版权声明:本文为weixin_35930535原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。