使用 Matplotlib 在半对数刻度上拟合直线

2023-12-27

我一直在努力在用 Matplotlib 和 Python 3 制作的半对数图上拟合直线。我见过很多双对数比例尺数字的例子,但我尝试过的解决方案都不起作用(使用numpy)。线最终总会在某个地方弯曲。

以下是我迄今为止所掌握的:

import os
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

base_path = os.path.dirname(os.path.realpath(__file__))

fig = plt.figure()
ax = fig.add_subplot(111)

# Plot data.
location = os.path.join(base_path, "data.csv")
data = np.genfromtxt(location, delimiter=',', names=['year', 'bw'])
ax.plot(data['year'], data['bw'])

# Fit test.
x = data['year']
y = data['bw']
y_ln = np.log10(y)

n = data.shape[0]
A = np.array(([[x[j], 1] for j in range(n)]))
B = np.array(y_ln[0:n])
B = np.array(y[0:n])

X = np.linalg.lstsq(A, B)[0]
a = X[0]
b = X[1]

fit = a * x + b

p = np.polyfit(x, np.log(y), 1)
ax.semilogy(x, p[0] * x + p[1], 'g--')

ax.set_yscale('log')

相关的data.csv文件如下所示:

2016, 68.41987090116676
2017, 88.9788618486191
2018, 90.94850458504749
2019, 113.20946182004333
2020, 115.71547492850719

The figure I obtain looks as following, where the fitted line is crooked. Semi-log plot with fit which should be a straight line.

非常感谢反馈和建议。


如果将数据的对数拟合到一条线上,则在实际绘制拟合数据时需要反转此操作。 IE。如果你适合一条线np.log(y),你需要绘制np.exp(fit_result).

# Fit test.
x = data['year']
y = data['bw']

p = np.polyfit(x, np.log(y), 1)
ax.semilogy(x, np.exp(p[0] * x + p[1]), 'g--')

完整示例:

import io
import matplotlib.pyplot as plt
import numpy as np

u = u"""2016, 68.41987090116676
2017, 88.9788618486191
2018, 90.94850458504749
2019, 113.20946182004333
2020, 115.71547492850719"""

data = np.genfromtxt(io.StringIO(u), delimiter=',', names=['year', 'bw'])

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(data['year'], data['bw'])

# Fit test.
x = data['year']
y = data['bw']

p = np.polyfit(x, np.log(y), 1)
ax.semilogy(x, np.exp(p[0] * x + p[1]), 'g--')

ax.set_yscale('log')

plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Matplotlib 在半对数刻度上拟合直线 的相关文章

随机推荐

  • Java - 多色文本

    I would like to have some text but have each character have more colors Here is an example please ignore the eggs for o
  • 操纵杆按键捕捉

    我想使用 winmm dll 捕获操纵杆的输入 我对导入和使用 DLL 没有太多了解 我尝试这样做 但我不知道该怎么做 DllImport winmm dll public static extern string joyGetPosEx
  • SQL 游标在调用 getString 时抛出内存不足

    附件参考我之前的问题 内存不足 https stackoverflow com questions 25928354 out of memory during xml deserialisation 我会尽力做到尽可能精确 我从我的网络服务
  • Java 序列化中瞬态如何与 Final 配合使用

    我正在阅读有关瞬态和最终关键字的内容 我发现答案是我们不能将瞬态关键字与最终关键字一起使用 我尝试过但很困惑 因为在这里它工作正常 import java io FileOutputStream import java io FileInp
  • 标签位于左侧而不是输入字段上方

    我希望标签不在输入字段上方 而是在左侧
  • Android 4.4 旋转动画在嵌套视图动画时闪烁

    当我将 Android 应用程序迁移到 4 4 时 我注意到一个非常奇怪的情况 突然 HUD 组件中的旋转动画开始闪烁并且不起作用 我正在尝试像这样旋转对象 rotateAnimation new RotateAnimation 180 3
  • 实施自动完成

    我无法为 Angular2 找到一个好的自动完成组件 只是我可以将键标签对象列表传递给并在其上有一个很好的自动完成功能的任何东西input field Kendo 尚不支持 Angular 2 但我们主要在内部使用它 Angular Mat
  • 在node.js中捕获异常

    我有一个简单的程序 需要确保我可以连接到 Redis 服务器 我使用node redis连接 需要等待Redis启动 我使用这段代码 function initializeRedis callback function createClie
  • PropertyGrid 属性列表

    我在 C 中找不到 PropertyGrid 的任何可用属性列表 您知道在哪里可以找到吗 Thanks 影响 PropertyGrid 的属性是间接的 有趣的代码是提供 PropertyDescriptor 实现的 TypeDescript
  • 使用 python 在 Windows 上进行多处理管道

    Windows 支持 multithreading pipes 吗 如果是 那么这段代码有什么问题 我需要使用减少吗 代码挂在 p2 recv 上 从命令行运行时出现运行时错误 import multiprocessing def Proc
  • Notes 的 UIActivityType 是什么?

    我试图从 UIActivityType 中排除除电子邮件和短信之外的所有服务 我正在使用以下语句 activityController excludedActivityTypes UIActivityTypeAddToReadingList
  • 将 .NET DateTimeFormatInfo 转换为 Javascript jQuery formatDate?

    我有一个 jQuery UI 日期选择器 我打算将其与 ASP NET MVC 中的文本框一起使用 文本框中的日期显示是通过 CultureInfo 本地化的 当然应该被 jquery 识别以在日期选择器中选择正确的日期 我现在想做的是用类
  • PowerShell SendKeys 到 InternetExplorer ComObject

    下面是我发现的一种方法 它将 IE ComObject 窗口带到前台并使用 SendKeys 如何使用此方法发送一系列按键 ie New Object ComObject InternetExplorer Application ie na
  • 我如何获得限制供应商(运输)的最佳报价组合,以及如何使用 python 或机器学习获得最佳价格

    用户在存储桶中选择 1 到 N 个产品 对于每种产品 供应商有 N 个报价 我想让用户有机会告诉他 我想要的输出是 如果您从供应商 A 处购买 您 5 件产品的总成本为 87 美元 如果您从供应商 A 和 B 处购买 您 5 件产品的总成本
  • 将元数据/自定义数据附加到通过 API 发送的 Slack 消息

    我正在为我的工作区开发一系列 Slack 应用程序 其中一些应用程序旨在与其他应用程序传递的内容 消息 进行交互 提取其他消息可能引用的内容 ID 一个具体的例子 假设我有一个应用程序 A FindUser 当 slack 用户键入时 它能
  • 链接到页面时,按钮文本(基于 JSON 调用)未加载

    我对 jQuery javascript 非常陌生 并且根据此介绍编写了一些代码JSON 和 PHP http www itnewb com tutorial Introduction to JSON and PHP最终在我的页面上看起来像
  • findViewById() 对于对话框中的视图返回 null

    问题是 无论我在哪里或如何调用此布局的组件 它们总是返回 null setView inflater inflate R layout search layout null 这很好用 它显示内部的布局Dialog 但是 子项始终返回为 nu
  • 天/小时/分钟/秒的快速倒计时器标签

    我正在创建一个倒计时器 倒计时到NSDate设置在一个UIDatePicker 我有一个标签 显示我们正在倒计时的日期 效果很好 我还想添加的是当天剩余天数和当天剩余小时 分钟 秒数的标签 即永远不会超过 23 59 59 这是我目前所做的
  • Firefox 无法解压 gzip 文件

    我有 gz 文件存储在 AWS s3 上 使用 s3 REST API 我生成指向各个文件的经过身份验证的链接 我还设置了内容标头选项 以便请求这些 URL 的浏览器将解压缩并下载 gzip 压缩的文件作为附件 生成的 s3 url 如下所
  • 使用 Matplotlib 在半对数刻度上拟合直线

    我一直在努力在用 Matplotlib 和 Python 3 制作的半对数图上拟合直线 我见过很多双对数比例尺数字的例子 但我尝试过的解决方案都不起作用 使用numpy 线最终总会在某个地方弯曲 以下是我迄今为止所掌握的 import os