【发布时间】:2014-11-11 22:55:00
【问题描述】:
我有一些数据绘制在半对数图上(log-lin 样式,在 y 轴上有对数刻度)。有没有办法将 y 轴刻度标签从它们的实际值更改为它们的对数值?
例如,考虑以下代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.array([1,2,3,4,5])
def f(x):
return 10**(x-1)
plt.plot(x,f(x))
plt.yscale(u'log')
plt.show()
这会产生以下情节:
(对不起,它有点大,我不知道如何使它变小,请随时编辑以提供帮助)。
在此图中,刻度标签显示为 10^0、10^1、10^2 等;但是我希望它们显示为对数值:0、1、2 等。
我意识到我可以回去将 plt.plot(x,f(x)) 更改为 plt.plot(x,np.log10(f(x))) 然后再次使 y 轴线而不是对数但我想知道 matplotlib 是否可以自己更改 y 轴刻度值无需我将np.log10() 放入我所有的plt.plot() 中。我这样做的原因有两个:我的代码中有很多 plt.plot() 行,我宁愿不回去并且必须为所有这些行更改它,然后我就不会有对数间隔的小刻度(虽然我'我确信即使使用线性轴也有一些方法可以改变它)。
编辑:我知道this question 与我的有一些相似之处,但并不相同。该问题中的人想要将刻度标签从科学形式更改为“正常”十进制形式。我想将我的刻度标签从科学形式更改为数字的对数(以 10 为底)值。我相信答案将与我链接的答案相似,但对我来说如何做到这一点并不明显。实际上,我在发布我的问题之前查看了该问题,但仍然决定发布我的问题,因为我不知道如何将其应用于我的问题。也许对于有经验的程序员来说,如何应用我与我的情况相关联的问题的方法是显而易见的,但对我来说并不明显,所以请逐步指导我。
如果您能向我展示一个代码示例(通过复制我的代码示例并添加必要的行),我将不胜感激。
【问题讨论】:
-
不确定日期格式化程序是最佳目标链接...@PaulH
-
使用log scale。您应该尝试查看gallery pages 并搜索您想要的内容。
标签: python matplotlib plot logarithm