Я использую цилиндрические координаты, создал meshgrid
и попытался построить, используя plot_surface
. Мой полный набор данных отображается неправильно, потому что масштабирование по оси Y неверно.
Я пытаюсь построить график зависимости значений магнитного поля от значений Z
и P
(rho). Z
может быть как отрицательным, так и положительным. P
(ро) может быть только положительным.
Проблема в том, что p
(ось Y) всегда начинается с 0
до 10
(что дает 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
), тогда как я хотел бы, чтобы это было похоже на: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
, чтобы его центр находился в 0
.
Так что это мой пример кода. Я не буду добавлять расчеты для магнитного поля. Это не относится к данной проблеме.
fig = plt.figure()
ax = Axes3D(fig)
# Define the plane over which fields are computed.
# N must be odd to include the point (0,0).
M = 26 # No. of points along the rho axis.
N = 51 # No. of points along the z axis.
p1 = np.linspace(0, a, M)
p = np.concatenate([p1[::-1][:-1], p1]) # Make it symmetric.
z = np.linspace(-d, d, N)
p, z = np.meshgrid(p, z) # Create grid of (p,z).
# CALCULATE magnetic field bt. So assume this is done here...
bt = np.sqrt(np.power(bz, 2) + np.power(bp, 2))
ax.plot_surface(z, p, bt, cmap=plt.cm.YlGnBu_r)
plt.show()
Итак, при добавлении строки,
p = np.concatenate([p1[::-1][:-1], p1])
размеры нарушены и plot_surface
справедливо жалуется. Я ожидаю, что эта строка будет центрировать 0 в середине массива.
Спасибо.