Построение тиков по оси x с положительными и отрицательными значениями в странном порядке -Python
У меня есть график, где мне нужно изменить тики в оси x, таким образом: значения x должны находиться в диапазоне от 0 до 32, а затем (ПОСЛЕДОВАТЕЛЬНО, БЕЗ ПРЕРЫВАНИЯ) от -31 до -1.
Вот код для создания такого xaxis, по крайней мере, в виде массива:
nyquist = int(64/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
Результат для xaxis
является:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, -31, -30, -29, -28, -27, -26, -25,
-24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12,
-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1])
Затем представьте, что кривая для построения хранится в:
curve = np.zeros(64, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
Хорошо, теперь мне нужно создать график, но с галочками, заданными "xaxis" (это нормально, если я строю не все 64 значения, а только 6 из них, например, но порядок должен соблюдаться, делая явное наличие отрицательных значений в этом странном порядке). Это то, что я делал раньше, но это не дает того, что хотел:
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
потому что, очевидно, это поместило бы на оси x 64 значения в диапазоне от 0 до 63, а не то, что мне нужно.
Как я могу сделать?
РЕДАКТИРОВАТЬ:
Я предоставляю часть исполняемого кода.
import matplotlib as plt
import numpy as np
n = 64
nyquist = int(n/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
curve = np.zeros(n, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
plt.savefig('curve.svg')
Это дает только "неправильный" график, тот, который имеет только положительные значения х
1 ответ
Ты можешь использовать xticks
как:
plt.xticks(range(len(xaxis)), xaxis)
Вы также можете повернуть значения xtick в случае наложения тиков как:
plt.xticks(range(len(xaxis)), xaxis, rotation='vertical')
Вы можете создать xaxis таким простым способом:
>>> range(1,33)+range(-32,0, 1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1]