在使用matplotlib进行绘图时,我总是会遇到这个问题...他们没有在绘图上绘制轴线的概念,在这种情况下,我特别希望在散点图上绘制xyz轴线,以使其看起来像所附的照片,包括从点到轴的投影线。
ploting a point with explicit axis lines through origin
相反,这就是我得到的:
# from jupyter notebook
%matplotlib
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter( 1, 1, 1, c='r', marker='o')
ax.scatter( 1, -1, 1, c='b', marker='o')
ax.scatter(-1, 1, -1, c='g', marker='o')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
ax.set_zlim(-2,2)
#ax.set_xticks(np.arange(-2, 2, 1))
#ax.set_yticks(np.arange(-2, 2, 1))
#ax.set_zticks(np.arange(-2, 2, 1))
plt.show()
最佳答案
好的,所以也许有直接的方法可以实现这一目标。如果没有,那么此代码将解决您的大部分问题。我创建了一个函数,可以根据需要生成虚线。
使用ax.quiver()
生成坐标系。
编辑:
您可以使用ax.set_axis_off()
之类的命令来生成发布的图像。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
def make_dashedLines(x,y,z,ax):
for i in range(0, len(x)):
x_val, y_val, z_val = x[i],y[i],z[i]
ax.plot([0,x_val],[y_val,y_val],zs=[0,0], linestyle="dashed",color="black")
ax.plot([x_val,x_val],[0,y_val],zs=[0,0], linestyle="dashed",color="black")
ax.plot([x_val,x_val],[y_val,y_val],zs=[0,z_val], linestyle="dashed",color="black")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [1,1,-1]
y = [1,-1,1]
z = [1,1,-1]
ax.scatter( x,y,z, c='r', marker='o')
make_dashedLines(x,y,z,ax)
# Make a 3D quiver plot
x, y, z = np.array([[-2,0,0],[0,-2,0],[0,0,-2]])
u, v, w = np.array([[4,0,0],[0,4,0],[0,0,4]])
ax.quiver(x,y,z,u,v,w,arrow_length_ratio=0.1, color="black")
ax.grid(False)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
ax.set_zlim(-2,2)
plt.show()
输出:
关于python - matplotlib散点图,其中xyz轴线通过原点(0,0,0),并且轴投影线到达每个点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54970401/