我想在matplotlib中制作一个3D图。我有6个点,有x,y和z坐标。我画了他们,我得到了这个:
但我的目标是蓝色线条之间的表面将填充颜色的情节。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
plt.rcParams['svg.fonttype'] = 'none' # during export plots as .svg files, text is exported as text (default text is exported as curves)
data = np.loadtxt('D:\PyCharm\File1.txt', skiprows=1)
x = data[:, 0]
y = data[:, 1]
z = data[:, 2]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z)
axes = plt.gca()
axes.set_xlim(5712000, 5716000)
axes.set_ylim(5576000, 5579000)
axes.set_zlim(-1000, -600)
axes.set_xlabel('X')
axes.set_ylabel('Y')
axes.set_zlabel('Z')
plt.tight_layout()
plt.show()
我试过三面图:
ax.plot_trisurf(x, y, z)
但形状不正确:
编辑: 关于我的数据:它的文本文件,如下所示:
X Y Z
5714397 5576607 -1008
5713159 5577871 -999
5713465 5577909 -1014
5714156 5577428 -1022
5714410 5577789 -1035
5715057 5577407 -1036
5714397 5576607 -1008
第二行和最后一行是相同的,但我尝试使用另一个文件,其中我删除了最后一行。情节与上述相同。
答案 0 :(得分:4)
您正在使用plot
绘制顶点。这给了你一条线,正如预期的那样。要获得填充多边形,请使用Poly3DCollection
。
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.tight_layout()
x,y,z = np.loadtxt('D:\PyCharm\File1.txt', skiprows=1, unpack=True)
verts = [zip(x, y,z)]
ax.add_collection3d(Poly3DCollection(verts))
ax.set_xlim(5712000, 5716000)
ax.set_ylim(5576000, 5579000)
ax.set_zlim(-1000, -600)
plt.show()