0

我一直在尝试重现此处显示的图表:绘图如您所见,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)

4

1 回答 1

0

您可以绘制y-x数刻度并相应地格式化 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))}'+'}}$'))

输出:

在此处输入图像描述

于 2020-11-18T05:00:49.263 回答