我想使用 matplotlib 绘制具有一个对数轴的图形。
我一直在阅读文档,但无法弄清楚语法。我知道在情节参数中它可能像 'scale=linear'
这样简单,但我似乎无法正确理解
示例程序:
import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
line, = ax.plot(a, color='blue', lw=2)
pylab.show()
您可以使用 Axes.set_yscale
方法。这允许您在创建 Axes
对象后更改比例。这也将允许您构建一个控件,让用户在需要时选择比例。
要添加的相关行是:
ax.set_yscale('log')
您可以使用 'linear'
切换回线性刻度。这是您的代码的样子:
import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
line, = ax.plot(a, color='blue', lw=2)
ax.set_yscale('log')
pylab.show()
https://i.stack.imgur.com/CmQwl.png
首先,混合 pylab
和 pyplot
代码不是很整洁。此外,pyplot style is preferred over using pylab。
这是一个稍微清理过的代码,仅使用 pyplot
函数:
from matplotlib import pyplot
a = [ pow(10,i) for i in range(10) ]
pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()
相关函数是pyplot.yscale()
。如果您使用面向对象的版本,请将其替换为方法 Axes.set_yscale()
。请记住,您还可以使用 pyplot.xscale()
(或 Axes.set_xscale()
)更改 X 轴的比例。
检查我的问题 What is the difference between ‘log’ and ‘symlog’? 以查看 matplotlib 提供的图形比例的一些示例。
pyplot.semilogy()
更直接。
如果要更改对数的底,只需添加:
plt.yscale('log',base=2)
在 Matplotlib 3.3 之前,您必须使用 basex/basey 作为 log 的基础
我知道这有点离题,因为一些评论提到 ax.set_yscale('log')
是“最好的”解决方案,我认为可能需要反驳。我不建议将 ax.set_yscale('log')
用于直方图和条形图。在我的版本(0.99.1.1)中,我遇到了一些渲染问题——不确定这个问题有多普遍。然而 bar 和 hist 都有可选的参数来设置 y-scale 为 log,这工作正常。
参考:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
因此,如果您只是像我经常使用的那样简单地使用简单的 API(我在 ipython 中经常使用它),那么这很简单
yscale('log')
plot(...)
希望这对寻找简单答案的人有所帮助! :)。
semilogy()
。此外,直接使用pyplot.yscale()
比使用ax.set_yscale('log')
更容易,因为不需要获取ax
对象(它并不总是立即可用)。loglog()
或仅在 x 轴上尝试semilogx()
ax
对象来使用pyplot
,该对象仅可能应用于您想要的 Axes。