gpt4 book ai didi

Python,matplotlib : how to set tick label values to their logarithmic values

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:33 25 4
gpt4 key购买 nike

我有一些数据绘制在半对数图上(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()

产生以下情节: enter image description here

(抱歉,它有点大,我不知道如何让它变小,请随意编辑以帮助解决这个问题)。

在此图中,刻度标签显示为 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 为底)值。我确信答案会与我链接的答案相似,但我不清楚如何去做。事实上,我在发布我的问题之前查看了那个问题,但仍然决定发布我的问题,因为我不知道如何将它应用到我的问题中。也许对于有经验的程序员来说,如何应用我链接到我的情况的问题的方法是显而易见的,但对我来说并不明显,所以请引导我完成它。

如果您能向我展示一个代码示例(通过复制我的代码示例并放入必要的行)这是如何工作的,我将不胜感激。

最佳答案

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

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

关于Python,matplotlib : how to set tick label values to their logarithmic values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com