绘制对数轴
- 2025-01-03 14:29:00
- admin 原创
- 190
问题描述:
我想使用 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()
解决方案 1:
您可以使用该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()
解决方案 2:
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()
更改 X 轴的刻度。pyplot.xscale()
`Axes.set_xscale()`
查看我的问题“ 'log' 和 'symlog' 之间有什么区别?”以查看 matplotlib 提供的一些图形比例示例。
解决方案 3:
如果你想改变对数的底数,只需添加:
plt.yscale('log',base=2)
在 Matplotlib 3.3 之前,你必须使用 basex/basey 作为对数的底数
解决方案 4:
您只需要使用符号学而不是情节:
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()
解决方案 5:
我知道这有点离题,因为有些评论提到了ax.set_yscale('log')
“最好的”解决方案,我认为可能需要反驳。我不建议将其用于ax.set_yscale('log')
直方图和条形图。在我的版本 (0.99.1.1) 中,我遇到了一些渲染问题 - 不确定这个问题有多普遍。但是 bar 和 hist 都有可选参数来将 y 比例设置为对数,这很好用。
参考文献:
http ://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
解决方案 6:
因此,如果你只是使用不太复杂的 API,就像我经常做的那样(我在 ipython 中经常使用它),那么这只是
yscale('log')
plot(...)
希望这能帮助那些寻找简单答案的人!:)。
解决方案 7:
本页提供了几种方法(semilogx、semilogy、loglog),但它们在底层都执行相同的操作,即调用set_xscale('log')
(用于 x 轴)和set_yscale('log')
(用于 y 轴)。此外,plt.yscale
/plt.scale
是状态机中的函数,它们对当前 Axes 对象调用set_yscale
/ set_xscale
。即使对于条形图(以及直方图,因为它们只是条形图),该参数也会根据条形方向log=True
调用set_yscale('log')
/ 。set_xscale('log')
因此,无论您使用哪一个,它们最终都会调用相同的方法。顺便说一句,除了能够选择日志的基数之外,您还可以在同一个函数调用中设置次要刻度位置(使用subs
kwarg)。
data = np.random.choice(np.logspace(-0.5, 1, base=20), 10)
plt.plot(data)
plt.yscale('log', base=10, subs=[10**x for x in (0.25, 0.5, 0.75)], nonpositive='mask')
# ^^^ <-- 3 equal-spaced minor ticks ^^^^ mask invalid values
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件