使用python中的matplotlib绘制对数轴

Plot logarithmic axes with matplotlib in python

我想用matplotlib绘制一个对数轴的图。

我一直在读文档,但找不到语法。我知道,在情节辩论中,可能有一些简单的东西,比如'scale=linear',但我似乎不明白。

示例程序:

1
2
3
4
5
6
7
8
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对象后更改比例。这还允许您构建一个控件,让用户在需要时选择刻度。

要添加的相关行是:

1
ax.set_yscale('log')

您可以使用'linear'切换回线性比例。您的代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
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


首先,混合pylabpyplot代码不是很整齐。而且,Pylot样式比使用Pylab更受欢迎。

这里有一个稍微清理过的代码,只使用pyplot函数:

1
2
3
4
5
6
7
8
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轴的比例。

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


你只需要使用符号学而不是绘图:

1
2
3
4
5
6
7
8
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()


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

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


我知道这有点离题,因为一些评论提到江户十一〔10〕是"最好的"解决方案,我认为应该进行反驳。我不建议在柱状图和条形图中使用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中使用它),那么这很简单

1
2
yscale('log')
plot(...)

希望这能帮助人们找到一个简单的答案!:)