我正在尝试在x轴上使用指数标度。我看过这篇文章:How can I exponentially scale the Y axis with 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轴不好:
我猜这是因为它试图获取负值或null值的对数。但是,我绘制的曲线中没有这样的值。
我知道,如果我显示对应的对数正态分布,则可以获得相似的图。但是,如上所述,我需要这样做的原因是我打算显示更复杂的概率密度函数和更复杂的xscale函数。
感谢您的帮助!