【问题标题】:Preserve linear y-axis scaling when plotting log data in matplotlib在 matplotlib 中绘制日志数据时保留线性 y 轴缩放
【发布时间】:2017-10-18 00:43:04
【问题描述】:

我找到了一些接近于此的解决方案,但我仍然无法正确标记我的轴。我错过了一些小东西。

我有一条放射性衰变曲线要绘制成一条直线。

我有 2 个数据列表,我使用 scatter(hours,np.log(activity),color='red') 进行绘图

y 轴按预期显示为 np.log(activity),但我希望在保持线性图的同时使其只是活动。

使用a.yaxis.set_major_formatter(ticker.FormatStrFormatter("%d")) 我可以将刻度标签更改为我想要的任何内容,但我无法将列表分配给刻度标签。例如,如果我将 %d 替换为 activity[0],则所有刻度都采用该值。

我希望这里很清楚我想要做什么。

看这里的情节

我要做的就是将 y 轴刻度乘以 np.exp(y-ticks)

干杯

【问题讨论】:

    标签: python matplotlib plot axis


    【解决方案1】:

    我将绘制scatter(hours, activity),然后绘制ax.set_yscale('log') 以将其绘制在对数刻度上,最后绘制ax.set_major_formatter(ScalarFormatter()) 以将刻度标签显示为常规数字(默认为科学记数法)。

    如果您真的必须绘制log(activity)(出于拟合目的或其他目的),那么您最初问题的答案是:

    ax.yaxis.set_major_formatter(FuncFormatter(lambda y, pos: "%.3f"%(np.exp(y))))
    

    https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.FuncFormatter

    【讨论】:

    • 你的第一点是我原来的方法,但是我正在做的其他拟合不能正确显示。对数刻度轴弄乱了线性拟合。第二点是我正在寻找的解决方案,tyvm!
    • 我在这种情况下的方法通常是对日志数据进行线性拟合,然后在原始数据的对数比例图上将拟合绘制为exp(m*x + b)。很高兴这个其他解决方案对你有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多