Как установить соответствующую точку зрения?

#matplotlib

#matplotlib

Вопрос:

Как установить xlim и ylim, чтобы видеть оба cureves (omega и y) на графике? Или как убедиться, что это невозможно?

 import matplotlib.pyplot as plt
import numpy as np

e = 1.602176634e-19
m_e = 9.1093837015e-31
k = np.arange(0.00001, 50000, 0.003)
eps_0 = 8.8541878128e-12
n_0 = 100
c = 299792458
omega_p = np.sqrt(n_0*e**2/(eps_0*m_e))           
omega = np.sqrt(omega_p**2 c**2 k**2)

y = k*c

fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [5, 5]

# Plot
ax.yaxis.set_label_coords(-0.07, 0.84)
ax.xaxis.set_label_coords(0.95, -0.05)
ax.set_xlabel(r'$k$')
ax.set_ylabel(r'$omega$', rotation='horizontal')
ax.set_xlim(10000, 40000)
ax.set_ylim(299792454, 299792462.1700816)
ax.plot(k, omega)
ax.plot(k, y)

# Focusing on appropriate part
print(omega[1000000]-omega[999999])
print(omega[-1]-omega[-2])
print(len(omega))
print(k[1000000])
print(k[-1])
print(omega[1000000])
print(omega[-1])
print(y[int(ax.get_xlim()[0])])
print(y[int(ax.get_xlim()[1])])
plt.show()
  

Вывод теперь:

введите описание изображения здесь

Должен быть также вспомогательный элемент.

Ответ №1:

Идея состоит в том, чтобы просто позволить matplotlib выбирать свои ограничения по умолчанию. Затем вы можете интерактивно увеличить область, представляющую интерес. Приведенный ниже код устанавливает логарифмическую шкалу для оси y, которая может помочь подогнать все. Чтобы избежать слишком большого количества точек, 16 миллионов точек np.arange(0.00001, 50000, 0.003) заменяются на np.linspace(0.00001, 50000, 10000) .

 import matplotlib.pyplot as plt
import numpy as np

e = 1.602176634e-19
m_e = 9.1093837015e-31
# k = np.arange(0.00001, 50000, 0.003)
k = np.linspace(0.00001, 50000, 10000)
eps_0 = 8.8541878128e-12
n_0 = 100
c = 299792458
omega_p = np.sqrt(n_0 * e ** 2 / (eps_0 * m_e))
omega = np.sqrt(omega_p ** 2   c ** 2   k ** 2)

y = k * c

fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [5, 5]

ax.set_xlabel(r'$k$')
ax.set_ylabel(r'$omega$', rotation='horizontal')
ax.plot(k, omega, color='blue')
ax.plot(k, y, color='red')
ax.set_yscale('log')
plt.show()
  

пример графика