绘制对数坐标轴
我想用matplotlib画一个图,其中有一个坐标轴是对数刻度。
下面是一个示例程序:
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)] # exponential
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
line, = ax.plot(a, color='blue', lw=2)
plt.show()
7 个回答
111
如果你想改变对数的底数,只需要加上:
plt.yscale('log',base=2)
在Matplotlib 3.3之前,你需要用basex/basey来设置对数的底数。
400
首先,把 pylab
和 pyplot
的代码混在一起看起来不太整洁。而且,使用 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()
。如果你用的是面向对象的版本,可以用 Axes.set_yscale()
来替代。记得你也可以通过 pyplot.xscale()
(或者 Axes.set_xscale()
)来改变 X 轴的刻度。
你可以查看我的问题 ‘log’ 和 ‘symlog’ 有什么区别,里面有一些 matplotlib 提供的图表刻度的例子。
671
你可以使用 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()