Диаграмма рассеяния matplotlib с линиями оси XYZ через начало координат (0,0,0) и линиями проекции оси в каждую точку - PullRequest
0 голосов
/ 03 марта 2019

У меня всегда есть эта проблема при построении графиков с помощью matplotlib ... они не имеют понятия рисования линий осей на графике, в данном случае я специально хочу, чтобы линии осей XYZ рисовались на графике рассеяния, чтобы он выглядел как присоединенныйфотография, включая линии проекта от точки до оси.

построение точки с явными линиями оси через начало координат

Вместо этого я получаю:

# 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()

1 Ответ

0 голосов
/ 03 марта 2019

Хорошо, так что, возможно, есть прямой способ добиться этого.Если нет, этот код решит большую часть вашей проблемы.Я создал функцию, которая генерирует пунктирные линии по мере необходимости.Используйте 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()

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...