ChatGPT解决这个技术问题 Extra ChatGPT

在 python 中使用 matplotlib 绘制对数轴

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

M
Max Ghenis

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

https://i.stack.imgur.com/CmQwl.png


这种方法很好,因为它适用于各种图(例如直方图),而不仅仅是“图”(这是 semilogx/semilogy 所做的)
我来这里是为了寻找如何将轴用于二的幂:pylab.gca().set_xscale('log',basex=2)
Matplotlib 有 semilogy()。此外,直接使用 pyplot.yscale() 比使用 ax.set_yscale('log') 更容易,因为不需要获取 ax 对象(它并不总是立即可用)。
如果您想要两个轴上的对数刻度,请尝试 loglog() 或仅在 x 轴上尝试 semilogx()
@EOL我建议相反。最好使用一个明确的 ax 对象来使用 pyplot,该对象仅可能应用于您想要的 Axes。
C
Community

首先,混合 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 提供的图形比例的一些示例。


pyplot.semilogy() 更直接。
m
mrks

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

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

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


S
Scott McCammon

您只需要使用 semilogy 而不是 plot:

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

还有semilogx。如果您需要在两个轴上登录,请使用 loglog
u
user3465408

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


c
crazy2be

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

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

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