Здравствуйте, я пытаюсь получить 3 графика на одном рисунке, используя matplotlib.
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
font = {'family' : 'Sans',
'weight' : 'normal',
'size' : 16}
matplotlib.rc('font', **font)
x = np.arange(20,100,0.1)
p = 6
a = 2
y1 = (((x-p) ** (-p-0.1)) * ((x-a) ** (0.1+a)))/(p-a)
y2 = (((x-p) ** (-p-50)) * ((x-a) ** (50+a)))/(p-a)
y3 = (((x-p) ** (-p-200)) * ((x-a) ** (200+a)))/(p-a)
plt.plot(x, y1, linewidth=2.0, label='q = 0.1')
plt.plot(x, y2, linewidth=2.0, label='q = 50')
plt.plot(x, y3, linewidth=2.0, label='q = 200')
plt.legend()
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
Я получаю вот такую фигуру, у которой синяя линия невидима, а желтая линия превращена в прямую:
Однако по отдельности синяя линия (Y1) видна, а желтая линия (Y2) не должна быть прямой.
Как я могу получить все три графика на одном рисунке в перекрывающемся виде?
plt.yscale("log")
Обратите внимание на масштабирование в левом верхнем углу графика. Зеленые данные (y3
) имеют значения порядка 1e16, а синие данные (y1
) имеют значения порядка 1e-5. Matplotlib попытается подогнать все, поэтому масштаб, необходимый для просмотра зеленых данных, означает, что остальные данные будут равны 0.
Чтобы просмотреть их все, измените масштаб оси Y на журнальный, добавив следующую строку:
plt.yscale("log")
Тогда вы получите это:
Примечание. В данных y3 есть NaN, поэтому линия обрезана.
Ваши данные охватывают совершенно разные масштабы. Рассмотрите возможность использования масштабирования журнала.