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

news/2025/2/24 13:37:05

需求:

在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、通义、文心一言提供的都报错,多次修改后才行)

python">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.niftyadmin.cn/n/5864395.html

相关文章

【ubuntu24.04】pycharm安装pygraphviz

pip install pygraphviz 安装失败 (05_ep_dev) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/05_ep_dev/expert/src/test/sumory# pip install pygraphviz Collecting pygraphviz Downloading pygraphviz-1.14.tar.gz (106 kB) Installing build dependencies … don…

网络传输的七层协议

网络传输的七层协议是 OSI模型(开放系统互联模型) 中的七个层次,每一层都负责不同的网络功能。具体如下: 物理层(Physical Layer) 负责在物理媒介上传输比特流,即将数据以电信号、光信号等形式在…

【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构

关键字:AOP、JWT、自定义注解、责任链模式 一、Spring Security Spring Security 想必大家并不陌生,是 Spring 家族里的一个安全框架,特别完善,但学习成本比较大,不少开发者都觉得,这个框架“很重” 他的…

机器学习数学通关指南——牛顿-莱布尼茨公式

前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 一句话总结 ∫ a b f ( x ) …

【并发编程】线程池任务抛异常会怎么样?

一、先说结论 得看线程池的实现,JUC 的线程池(ThreadPoolExecutor)的话 不会影响其他的线程若是 submit 方法,或者任务为 future 任务,异常只有在 get 的时候才会抛出若是 execute runnable 任务,异常就…

DataWhale组队学习 wow-agent task4

整体概念总结 智能体的实现方法 安装与配置:安装和配置MetaGPT,包括Python环境的准备、MetaGPT的安装(通过pip或git拉取代码),以及配置大模型API(如智谱、科大讯飞、百度千帆等)。 单动作单智能…

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…

golang设计模式-函数选项模式

函数选项模式 什么是函数选项模式 在 Go 语言中,函数选项模式是一种优雅的设计模式,用于处理函数的可选参数。它提供了一种灵活的方式,允许用户在函数调用时传递一组可选参数,而不是依赖于固定数量和顺序的参数列表。 哪些地方…