使用python中的matplotlib绘制对数轴

时间:2009-04-21 18:00:26

标签: python matplotlib scale logarithm

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

6 个答案:

答案 0 :(得分:309)

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

result chart

答案 1 :(得分:258)

首先,混合pylabpyplot代码并不是很整洁。更重要的是,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提供的图表比例示例。

答案 2 :(得分:61)

您只需使用semilogy代替剧情:

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()

答案 3 :(得分:16)

如果你想改变对数的基数,只需添加:

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log

答案 4 :(得分:8)

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

答案 5 :(得分:5)

因此,如果您只是使用不复杂的API,就像我经常使用的那样(我在ipython中经常使用它),那么这只是

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

希望这有助于寻找简单答案的人! :)