需求:
在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')
生成的图片