使用python中的matplotlib绘制对数轴

325 python logarithm matplotlib scale

我想使用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()
Run Code Online (Sandbox Code Playgroud)

Mat*_*ieu 340

您可以使用该Axes.set_yscale方法.这允许您在Axes创建对象后更改比例.这也可以让你构建一个控件,让用户在需要时选择比例.

要添加的相关行是:

ax.set_yscale('log')
Run Code Online (Sandbox Code Playgroud)

您可以使用'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()
Run Code Online (Sandbox Code Playgroud)

结果图表

  • Matplotlib有`semilogy()`.此外,直接使用`pyplot.yscale()`比使用`ax.set_yscale('log')`更容易,因为不需要获取`ax`对象(并不总是立即可用). (51认同)
  • 我来到这里寻找如何使用轴为2的幂:pylab.gca().set_xscale('log',basex = 2) (16认同)
  • @EOL我会建议相反.最好使用一个显式的`ax`对象来使用`pyplot`,只有_might_才能应用于你想要的Axes. (8认同)
  • 这种方法很好,因为它适用于各种图(例如直方图),而不仅仅是"情节"(这是semilogx/semilogy所做的) (6认同)
  • 如果你想在两个轴上都有日志比例,试试`loglog()`或者在x轴上只试试`semilogx()` (4认同)

Den*_*aia 268

首先,混合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()
Run Code Online (Sandbox Code Playgroud)

相关功能是pyplot.yscale().如果使用面向对象的版本,请使用该方法替换它Axes.set_yscale().请记住,您也可以使用pyplot.xscale()(或Axes.set_xscale())更改X轴的比例.

检查我的问题'log'和'symlog'有什么区别?查看matplotlib提供的图表比例的几个示例.

  • `pyplot.semilogy()`更直接. (11认同)

Sco*_*mon 63

你只需要使用半决赛而不是剧情:

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()
Run Code Online (Sandbox Code Playgroud)

  • 还有[semilogx](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.semilogx).如果您需要登录两个轴,请使用[loglog](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.loglog) (5认同)

Daw*_*wid 27

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

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log
Run Code Online (Sandbox Code Playgroud)


小智 8

我知道这有点偏离主题,因为一些评论提到了ax.set_yscale('log')"最好的"解决方案,我认为可能是应该的反驳.我不建议使用ax.set_yscale('log')直方图和条形图.在我的版本(0.99.1.1)中,我遇到了一些渲染问题 - 不确定这个问题有多普遍.但是bar和hist都有可选的参数来将y标度设置为log,这样可以正常工作.

参考:http: //matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist


cra*_*2be 5

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

yscale('log')
plot(...)
Run Code Online (Sandbox Code Playgroud)

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