Python plt.axis ('Equal') xlim - PullRequest
       18

Python plt.axis ('Equal') xlim

0 голосов
/ 01 июня 2018

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

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

X = np.array([-100,   0,  100])
Y = np.array([   0,  10,   20])

X_grid, Y_grid = np.meshgrid(X,Y)

Z_grid = np.matrix('0 10 4;'
                '1 11 3;'
                '0 10 5')

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X_grid, Y_grid, Z_grid, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=1, antialiased=True)
plt.axis('Equal')

, который дает этот график: enter image description here

Затем мне нужно вручную уменьшить масштаб, чтобы получить надлежащие пределы оси.Я пробовал plt.xlim(-100,100), но он не отвечает?Кроме того, the plt.axis('Equal') не относится к оси z?

График должен выглядеть следующим образом:

enter image description here

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете легко адаптировать стратегии по ссылке в комментарии, чтобы операции просто влияли на плоскость XY:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

X = np.array([-100,   0,  100])
Y = np.array([   0,  10,   20])

X_grid, Y_grid = np.meshgrid(X,Y)

Z_grid = np.matrix('0 10 4;'
                '1 11 3;'
                '0 10 5')

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

surf = ax.plot_surface(X_grid, Y_grid, Z_grid, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=1, antialiased=True)

max_range = np.array([X_grid.max()-X_grid.min(), Y_grid.max()-Y_grid.min()]).max() / 2.0

mid_x = (X_grid.max()+X_grid.min()) * 0.5
mid_y = (Y_grid.max()+Y_grid.min()) * 0.5

ax.set_xlim(mid_x - max_range, mid_x + max_range)
ax.set_ylim(mid_y - max_range, mid_y + max_range)

plt.show()

Вывод:

enter image description here

...