Я пытаюсь использовать экспоненциальную шкалу на оси. Я посмотрел этот пост: Как я могу экспоненциально масштабировать ось Y с помощью matplotlib , но не нашел простого решения для этого.
Я думал, что функция matplotlib set_xscale
сможет выполнить эту работу очень легко. Однако следующий код выдает предупреждение, и отображаемый результат далек от ожидаемого:
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats
def forward(x):
return np.exp(x)
def reverse(x):
return np.log(x)
# Define a Gaussian probability density function:
mu,std=6.6,0.75
rv = stats.norm(loc=mu,scale=std)
# x sample
x = np.linspace(mu - 3 * std, mu + 3 * std, 100)
# Display
fig, axes = plt.subplots(2, 1)
axes[0].plot(x, rv.pdf(x), color='r')
axes[0].set_title('linear scale')
axes[1].plot(x, rv.pdf(x), color='r')
axes[1].set_title('exponential scale')
axes[1].set_xscale('function', functions=(forward, reverse))
В результате я получаю следующее предупреждение:
RuntimeWarning: invalid value encountered in log
, а ось x на рисунке не хорошая:
![enter image description here](https://i.stack.imgur.com/zmXHI.png)
Я полагаю, это потому, что он пытается получить лог отрицательного или нулевого значения. Однако на графике I такого значения нет.
Я знаю, что мог бы получить подобный график, если бы отобразил соответствующее логнормальное распределение. Однако причина, по которой я должен сделать это, как я описал, заключается в том, что я планирую отображать более сложные функции плотности вероятности с более сложными функциями xscale.
Спасибо за помощь!