当前位置: 首页 > 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')

生成的图片

相关文章:

  • 自己的百科词条能删掉吗?个人如何删除自己的百科词条?
  • 电动机能耗制动控制电路
  • SVM 支持向量机
  • Java笔记18
  • 前缀和与差分
  • 【深度学习】Adam和AdamW优化器有什么区别,以及为什么Adam会被自适应学习率影响
  • 鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)
  • MySQL 数据库基础
  • Ryu控制器:L2交换功能实现案例
  • 帆软report
  • 使用GPU训练模型
  • js数据类型检测
  • Linux 常见面试题汇总
  • Baklib一站式企业知识库搭建指南
  • Deepseek首页实现 HTML
  • 连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接
  • 通俗易懂的浏览器事件循环指南(含async/await)
  • Linux提权之计划任务反弹shell提权(十一)
  • 【Viewer.js】vue3封装图片查看器
  • 【时时三省】(C语言基础)结构化程序设计方法
  • 多家媒体及网红走进云南曲靖沾益:感受珠江源头
  • 王羲之《丧乱帖》在日本流传了1300年,将在大阪展23天
  • 同款瑞幸咖啡竟差了6元,开了会员仍比别人贵!客服回应
  • 中公教育:去年全面扭亏,经营性现金流增长169.6%
  • 福建省莆田市原副市长胡国防接受审查调查
  • 摩根士丹利基金雷志勇:AI带来的产业演进仍在继续,看好三大景气领域