Исправление артефактов построения графиков при использовании plt.xscale('symlog')Python

Программы на Python
Ответить
Anonymous
 Исправление артефактов построения графиков при использовании plt.xscale('symlog')

Сообщение Anonymous »

Как исправить эти изломы на кривыхnormal_pan иnormal_tau? Я пробовал использовать довольно высокое разрешение и логарифмический интервал при определении t, но это не решило проблему.

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt

t = np.logspace(0, 4, 10**5, base=10)

CP = 400
P_an = 1100
tau = 30

P = CP+P_an/(1+t/tau)

dP_dPan = 1/(1+t/tau)
dP_dtau = (P_an*t)/(tau**2*(1+t/tau)**2)

S_CP = CP/P
norm_pan = (dP_dPan - dP_dPan.min()) / (dP_dPan.max() - dP_dPan.min())
norm_tau = (dP_dtau - dP_dtau.min()) / (dP_dtau.max() - dP_dtau.min())

plt.figure(figsize=(6,4))
plt.plot(t, norm_pan, label=r'$\text{P}_\text{an}$')
plt.plot(t, norm_tau, label=r'$\tau$')
plt.plot(t, S_CP, label="CP")

plt.vlines(tau, 0, max(norm_tau), linestyles=':', colors="dimgray", alpha=.4, lw=1.5)

plt.xscale('symlog')
plt.xlim(1, 10001)
plt.ylim(0, 1.05)

ax = plt.gca()
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)

ax.set_xticks([1, 10, tau, 100, 1000, 10000])
ax.set_xticklabels([1, 10, r'$\tau$', 100, 1000, 10000])

plt.legend(fontsize=9, frameon=False, loc='center right')

plt.tight_layout()
plt.show()
Изображение

Я считаю, что это артефакт построения графика, который становится еще более заметным при построении графика для диапазона plt.xlim(0.1, 100001)
Изображение

Редактировать
Решение проблемы заставляет меня понять, что артефакт, вероятно, возник и в отношении CP; однако это было сложнее заметить из-за наклона кривой, близкого к единице.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»