在非对称对数刻度上绘制负值
Plotting negative values on a non symmetric log scale
我一直在尝试重现此处显示的图表: 如您所见,x 轴是对数刻度,仅包含 个负值。我在网上查找了一些提示。其中大部分涉及 matplotlib 的 symlog 函数,我不想使用它,因为我试图绘制的函数仅在 ]-inf,0[ 上定义。所以我要求另一个建议。此外,我希望 x 轴仅在附件中显示三个刻度(即 -10^0、-10^-2、-10^-4)。欢迎任何提示!谢谢!
函数的代码是:
x = np.linspace(-1, -0.0001, 10000)
a = 2*np.log((1+(1-16*20*x)**0.25)/2) +np.log((1+((1-16*20*x)**0.25)**2)/2) - 2*np.arctan((1-16*20*x)**0.25) + np.pi/2
b = 2*np.log((1+(1-16*10*x)**0.25)/2) +np.log((1+((1-16*10*x)**0.25)**2)/2) - 2*np.arctan((1-16*10*x)**0.25) + np.pi/2
c = 2*np.log((1+(1-16*5*x)**0.25)/2) +np.log((1+((1-16*5*x)**0.25)**2)/2) - 2*np.arctan((1-16*5*x)**0.25) + np.pi/2
y = (np.log(20/5) - a + b)/(np.log(10/5) - c + b)
您可以在对数刻度中针对 -x
绘制 y
并相应地格式化 xticks:
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots()
ax.plot(-x,y)
ax.set_xscale('log')
ax.invert_xaxis()
ax.set_xticks([1,1e-2,1e-4])
ax.xaxis.set_major_formatter(FuncFormatter(lambda x,pos: '$-\mathdefault{10^{'+f'{int(np.log10(x))}'+'}}$'))
输出:
我一直在尝试重现此处显示的图表:
函数的代码是:
x = np.linspace(-1, -0.0001, 10000)
a = 2*np.log((1+(1-16*20*x)**0.25)/2) +np.log((1+((1-16*20*x)**0.25)**2)/2) - 2*np.arctan((1-16*20*x)**0.25) + np.pi/2
b = 2*np.log((1+(1-16*10*x)**0.25)/2) +np.log((1+((1-16*10*x)**0.25)**2)/2) - 2*np.arctan((1-16*10*x)**0.25) + np.pi/2
c = 2*np.log((1+(1-16*5*x)**0.25)/2) +np.log((1+((1-16*5*x)**0.25)**2)/2) - 2*np.arctan((1-16*5*x)**0.25) + np.pi/2
y = (np.log(20/5) - a + b)/(np.log(10/5) - c + b)
您可以在对数刻度中针对 -x
绘制 y
并相应地格式化 xticks:
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots()
ax.plot(-x,y)
ax.set_xscale('log')
ax.invert_xaxis()
ax.set_xticks([1,1e-2,1e-4])
ax.xaxis.set_major_formatter(FuncFormatter(lambda x,pos: '$-\mathdefault{10^{'+f'{int(np.log10(x))}'+'}}$'))
输出: