如何制作此 LogLog 图?
How do I make this LogLog plot?
我是 python 的新手,我正在尝试创建一个 LogLogPlot,类似于下图中的那个:
如上图所示,该图基于方程 y=x^2/(e^x +1)。
我找到了 https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.loglog.html,但它对我来说意义不大。
我也尝试了 link 中显示的代码:pyplot: loglog() with base e 并更改了“y”的表达式,但是轴是以指数形式编写的,我的目标是如图所示,用实数表示的轴。代码如下:
# Generate some data.
x = np.linspace(0, 10, 10)
y = x**2/(np.exp(x)+1)
plt.loglog(x,y, basex=np.e, basey=np.e)
plt.show()
但这并没有给我提供与上面相同的情节。
您当前的 x 轴只有 10 个值,在 0 到 10 之间的线性 space 中同样 spaced。您需要更多值,在 logspaced 中同样=33=]。例如,np.logspace(-3, 1, 100)
在 10-3 和 101.
之间创建 100 个 x 值
如果您更改 plt.loglog(x, y, basex=np.e, basey=np.e)
中的基数,轴将显示为 e
的幂次方的刻度。如果不更改底数,默认使用熟悉的 10 次方。请注意,更改底数不会更改转换,它只会更改刻度的位置。
import numpy as np
import matplotlib.pyplot as plt
x = np.logspace(-3, 1, 100)
y = x ** 2 / (np.exp(x) + 1)
plt.loglog(x, y)
plt.autoscale(enable=True, axis='x', tight=True) # optionally set a tight x-axis
plt.show()
PS:为了避免科学记数法,this post建议:
import matplotlib.ticker as ticker
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, _: f'{y:g}'))
plt.gca().xaxis.set_major_formatter(ticker.FuncFormatter(lambda y, _: f'{y:g}'))
或者,对更多小数也强制使用十进制表示法:
plt.gca().yaxis.set_major_formatter(
ticker.FuncFormatter(lambda y, _: ('{{:.{:1d}f}}'.format(int(np.maximum(-np.log10(y),0)))).format(y)))
我是 python 的新手,我正在尝试创建一个 LogLogPlot,类似于下图中的那个:
如上图所示,该图基于方程 y=x^2/(e^x +1)。
我找到了 https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.loglog.html,但它对我来说意义不大。
我也尝试了 link 中显示的代码:pyplot: loglog() with base e 并更改了“y”的表达式,但是轴是以指数形式编写的,我的目标是如图所示,用实数表示的轴。代码如下:
# Generate some data.
x = np.linspace(0, 10, 10)
y = x**2/(np.exp(x)+1)
plt.loglog(x,y, basex=np.e, basey=np.e)
plt.show()
但这并没有给我提供与上面相同的情节。
您当前的 x 轴只有 10 个值,在 0 到 10 之间的线性 space 中同样 spaced。您需要更多值,在 logspaced 中同样=33=]。例如,np.logspace(-3, 1, 100)
在 10-3 和 101.
如果您更改 plt.loglog(x, y, basex=np.e, basey=np.e)
中的基数,轴将显示为 e
的幂次方的刻度。如果不更改底数,默认使用熟悉的 10 次方。请注意,更改底数不会更改转换,它只会更改刻度的位置。
import numpy as np
import matplotlib.pyplot as plt
x = np.logspace(-3, 1, 100)
y = x ** 2 / (np.exp(x) + 1)
plt.loglog(x, y)
plt.autoscale(enable=True, axis='x', tight=True) # optionally set a tight x-axis
plt.show()
PS:为了避免科学记数法,this post建议:
import matplotlib.ticker as ticker
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, _: f'{y:g}'))
plt.gca().xaxis.set_major_formatter(ticker.FuncFormatter(lambda y, _: f'{y:g}'))
或者,对更多小数也强制使用十进制表示法:
plt.gca().yaxis.set_major_formatter(
ticker.FuncFormatter(lambda y, _: ('{{:.{:1d}f}}'.format(int(np.maximum(-np.log10(y),0)))).format(y)))