494

我想使用 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()
4

6 回答 6

539

您可以使用该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()

结果图

于 2009-07-26T00:14:42.870 回答
347

首先,混合pylabpyplot编码不是很整洁。更重要的是,pyplot 风格比使用 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()。如果您使用面向对象的版本,请将其替换为 method Axes.set_yscale()。请记住,您还可以使用pyplot.xscale()(或Axes.set_xscale())更改 X 轴的比例。

检查我的问题'log'和'symlog'有什么区别?查看 matplotlib 提供的图形比例的一些示例。

于 2010-08-18T15:10:32.733 回答
76

您只需要使用符号学而不是情节:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()
于 2009-04-21T18:07:42.637 回答
69

如果要更改对数的底,只需添加:

plt.yscale('log',base=2) 

在 Matplotlib 3.3 之前,您必须使用 basex/basey 作为 log 的基础

于 2017-12-25T11:56:07.910 回答
9

我知道这有点离题,因为一些评论提到了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

于 2014-04-08T18:14:47.040 回答
7

因此,如果您只是像我经常使用的那样简单地使用简单的 API(我在 ipython 中经常使用它),那么这很简单

yscale('log')
plot(...)

希望这对寻找简单答案的人有所帮助!:)。

于 2017-03-22T00:56:11.297 回答