Я пытаюсь создать фигуру, содержащую несколько графиков, и нормализую их все, чтобы их можно было легко различить. У меня возникли проблемы с формулировкой того, что я пытаюсь сделать, но приведенный ниже пример кода должен помочь прояснить ситуацию.
Пример графика, сгенерированного приведенным ниже кодом.
Код создает фигуру с тремя линиями на ней. Данные черной линии варьируются от -1000 до 1000, поэтому масштаб корректируется соответствующим образом. Это означает, что изменение данных зеленого цвета, а тем более красного, трудно увидеть. В идеале я хотел бы увеличить зеленые и красные данные, чтобы их изменение было более четким, но, надеюсь, без простого умножения на постоянное значение.
Пример результата, на который я надеюсь: все разные линии имеют разные порядки величины, но были приспособлены к произвольному масштабу оси Y, чтобы можно было продемонстрировать их форму.
import numpy as np
import matplotlib.pyplot as plt
time_arr = np.arange(0, 25, 1)
dist_arr = np.zeros(len(time_arr))
speed_arr = np.zeros(len(time_arr))
energy_arr = np.zeros(len(time_arr))
for i in range(len(time_arr)):
dist_arr[i] = np.random.randint(-10, 10)
speed_arr[i] = np.random.randint(-50, 50)
energy_arr[i] = np.random.randint(-1000, 1000)
fig = plt.figure(figsize=(13,13))
plt.plot(time_arr, dist_arr, 'red', linestyle='-', label='dist (m)', linewidth=5)
plt.plot(time_arr, speed_arr, 'lime', linestyle='-', label='speed (m/s)', linewidth=5)
plt.plot(time_arr, energy_arr, 'black', linestyle='--', label='E_tot (J)', linewidth=5)
plt.xlabel('Time (s)', fontsize=25)
plt.ylabel('Various Params', fontsize=25)
plt.tick_params(axis='x', labelsize=20)
plt.tick_params(axis='y', labelsize=20)
plt.title('Various VS Time', fontsize = 32, y=1.008)
plt.legend(loc='best', fontsize=25)
plt.show()
Я пробовал играть с такими вещами, как plt.ylim([0, 100]) для каждого отдельного линейного графика, но, похоже, это не сработало. Любая помощь здесь была бы фантастической, ура.
ИЗМЕНИТЬ:
Проблема решена в комментариях благодаря улучшенной технике нормализации ImportanceOfBeingErnest в сочетании с принятым ответом. Спасибо!
norm = lambda x: (x-x.min())/(x.max()-x.min())
, либо диапазон вокруг среднего значения,norm = lambda x: 2*(x-x.mean())/(x.max()-x.min())
или аналогичный. - person ImportanceOfBeingErnest   schedule 08.04.2017