当前位置: 首页 > news >正文

python读取sqlite温度数据,并画出折线图

需求:

在Windows下请用python画出折线图,x轴是时间,y轴是温度temperature 和体感温度feels_like_temperature 。可以选择县市近1小时,近1天,近1个月的。sqlite文件weather_data.db当前目录下,建表结构如下: CREATE TABLE IF not EXISTS weather ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TEXT, weather1 TEXT, temperature TEXT, humidity TEXT, feels_like_temperature TEXT, wind TEXT)

实现代码(deepseek、通义、文心一言提供的都报错,多次修改后才行)

import sqlite3
import pandas as pd
import matplotlib
matplotlib.use('Agg')  # 设置为非交互式后端
import matplotlib.pyplot as plt
from datetime import datetime
from matplotlib.ticker import MaxNLocator# 连接到SQLite数据库
conn = sqlite3.connect('weather_data.db')# 查询数据
query = """
SELECT timestamp, temperature, feels_like_temperature, humidity
FROM weather
ORDER BY timestamp
"""# 将数据读取到Pandas DataFrame中
df = pd.read_sql_query(query, conn)# 关闭数据库连接
conn.close()# 将timestamp列转换为datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])# 设置时间范围为近1小时、近1天、近1个月
now = datetime.now()
one_hour_ago = now - pd.Timedelta(hours=1)
one_day_ago = now - pd.Timedelta(days=1)
one_month_ago = now - pd.Timedelta(days=30)# 过滤数据
df_last_hour = df[df['timestamp'] >= one_hour_ago]
df_last_day = df[df['timestamp'] >= one_day_ago]
df_last_month = df[df['timestamp'] >= one_month_ago]# 绘制折线图
def plot_weather_data(data, title):fig, ax1 = plt.subplots(figsize=(12, 6))# 绘制温度和体感温度color = 'tab:red'ax1.set_xlabel('Time')ax1.set_ylabel('Temperature (°C)', color=color)ax1.plot(data['timestamp'], data['temperature'], label='Temperature (°C)', color=color)ax1.plot(data['timestamp'], data['feels_like_temperature'], label='Feels Like Temperature (°C)', color='tab:orange', linestyle='--')ax1.tick_params(axis='y', labelcolor=color)ax1.legend(loc='upper left')# 设置y轴的最大刻度数量ax1.yaxis.set_major_locator(MaxNLocator(nbins=10))  # 例如,最多6个主要刻度# 创建第二个y轴,绘制湿度ax2 = ax1.twinx()color = 'tab:blue'ax2.set_ylabel('Humidity (%)', color=color)ax2.plot(data['timestamp'], data['humidity'], label='Humidity (%)', color=color, linestyle=':')ax2.tick_params(axis='y', labelcolor=color)# 设置第二个y轴的最大刻度数量(如果需要)ax2.yaxis.set_major_locator(MaxNLocator(nbins=12))  # 例如,最多6个主要刻度ax2.legend(loc='upper right')# 设置标题和格式plt.title(title)plt.xticks(rotation=45)plt.tight_layout()plt.savefig(f"{title}.png")  # 保存图像到文件plt.close()  # 关闭图像以释放内存# 绘制近1小时的天气数据
plot_weather_data(df_last_hour, 'Weather Data in the Last Hour')# 绘制近1天的天气数据
plot_weather_data(df_last_day, 'Weather Data in the Last Day')# 绘制近1个月的天气数据
plot_weather_data(df_last_month, 'Weather Data in the Last Month')

生成的图片

http://www.lryc.cn/news/543603.html

相关文章:

  • 《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师
  • UE Python笔记
  • 使用django调用deepseek api,搭建ai网站
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 两台互通的服务器使用Docker部署一主两从MySQL8.0.35
  • Java23种设计模式案例
  • stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
  • JavaScript知识点4
  • 形式化数学编程在AI医疗中的探索路径分析
  • QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,加密压缩,带有压缩进度
  • Ubuntu 安装 Nginx并配置反向代理
  • GitHub SSH连接问题解决指南
  • C++ 跨平台的 GetCurrentThreadId() 获取当前线程ID实现
  • 钉钉MAKE AI生态大会思考
  • SQL笔记#复杂查询
  • 【Linux】基于UDP/TCP套接字编程与守护进程
  • springboot 引入前端
  • RTSP/Onvif安防平台EasyNVR接入EasyNVS显示服务缺失的原因与解决方案
  • 算法系列之回溯算法
  • Uniapp 小程序接口封装与使用
  • Harmony开发笔记(未完成)
  • 观成科技:海莲花“PerfSpyRAT”木马加密通信分析
  • Spring Boot @Async 注解深度指南
  • windows设置暂停更新时长
  • Orange 开源项目 - 集成百度智能云-千帆大模型
  • 特斯拉 FSD 算法深度剖析:软件层面全解读
  • 2025/2/17--2/23学习笔记(week1)_C语言
  • 数据结构:二叉树的数组结构以及堆的实现详解
  • AWS S3 如何设置公开访问权限?
  • 使用TortoiseGit配合BeyondCompare实现在Git仓库中比对二进制文件