【问题标题】:Python, matplotlib: how to set tick label values to their logarithmic valuesPython,matplotlib:如何将刻度标签值设置为其对数值
【发布时间】: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 为底)值。我相信答案将与我链接的答案相似,但对我来说如何做到这一点并不明显。实际上,我在发布我的问题之前查看了该问题,但仍然决定发布我的问题,因为我不知道如何将其应用于我的问题。也许对于有经验的程序员来说,如何应用我与我的情况相关联的问题的方法是显而易见的,但对我来说并不明显,所以请逐步指导我。

如果您能向我展示一个代码示例(通过复制我的代码示例并添加必要的行),我将不胜感激。

【问题讨论】:

标签: python matplotlib plot logarithm


【解决方案1】:

您可以使用自定义格式化程序,例如:

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import numpy as np
import math

x=np.array([1,2,3,4,5])

def f(x):
    return 10**(x-1)

plt.plot(x,f(x))
plt.yscale(u'log')

#SET CUSTORM TICK FORMATTING
plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x,y: '{}'.format(math.log(x, 10))))

plt.show()

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2014-03-22
    • 2016-07-15
    • 1970-01-01
    • 2020-09-24
    • 2019-06-20
    • 2011-09-23
    相关资源
    最近更新 更多