请读取data_temp.txt文件 计算成都9月的温差并将温差绘制为折线图,文件中有年 月 日 高温 低温 AQI 风向 风力 降水量这几列信息
时间: 2025-07-06 20:52:03 浏览: 15
### 使用Python处理成都9月份温度数据并绘制温差折线图
为了实现这一目标,可以按照以下方式编写代码:
#### 数据读取与预处理
首先定义函数来加载`data_temp.txt`中的数据,并过滤出特定条件下的记录——即只保留属于成都市且发生在九月的数据条目。
```python
import pandas as pd
def load_and_filter_data(file_path, city_name='成都', target_month=9):
"""
加载文本文件并将符合条件的城市和月份的数据筛选出来
参数:
file_path (str): 文件路径.
city_name (str): 城市名称,默认为'成都'.
target_month (int): 目标月份,默认为9.
返回值:
DataFrame: 过滤后的数据框对象.
"""
columns = ['year', 'month', 'day', 'max_temperature', 'min_temperature'] # 定义列名
data = pd.read_csv(
file_path,
sep='\s+', # 设定分隔符为空白字符
names=columns # 设置自定义列名
)
filtered_df = (
data[(data['city'] == city_name) & (data['month'] == target_month)]
.dropna(subset=['max_temperature', 'min_temperature']) # 删除含有缺失最大/最小温度的行
[['year', 'month', 'day', 'max_temperature', 'min_temperature']] # 只保留所需字段
)
return filtered_df
```
此部分利用Pandas库高效地完成了对原始CSV格式文本文件(`data_temp.txt`)中结构化表格型数据集的操作;通过设置合适的参数组合实现了针对不同城市的多个月份间灵活切换的功能[^1]。
#### 计算每日温差
接着创建一个新的列用于存储每一天的最大与最小气温之间的差异。
```python
filtered_df['temperature_difference'] = abs(filtered_df['max_temperature'] - filtered_df['min_temperature'])
```
上述语句简单明了,在已有的DataFrame基础上新增了一列表达式表示当天最高最低气温之差绝对值的结果[^2]。
#### 绘制图表展示结果
最后一步是可视化这些信息。这里选择了Matplotlib作为绘图工具包,因为它能够轻松制作高质量图形的同时还提供了丰富的定制选项。
```python
import matplotlib.pyplot as plt
def plot_daily_temperatures(df):
"""
根据给定的数据帧绘制每天的温度变化情况
参数:
df (DataFrame): 包含日期以及对应温度差的信息表.
"""
dates = [f"{row.year}-{row.month:0>2d}-{row.day:0>2d}" for _, row in df.iterrows()]
temp_diffs = list(df.temperature_difference)
fig, ax = plt.subplots(figsize=(14,7))
ax.plot(dates, temp_diffs, marker="o", linestyle="-")
max_idx = temp_diffs.index(max(temp_diffs)) # 找到最大温差的位置索引
min_idx = temp_diffs.index(min(temp_diffs))
# 添加标注显示最大最小温差点的具体数值
ax.annotate(f'Max Diff\n{temp_diffs[max_idx]}°C',
xy=(dates[max_idx], temp_diffs[max_idx]),
textcoords="offset points",
xytext=(-10,-15),
ha='center')
ax.annotate(f'Min Diff\n{temp_diffs[min_idx]}°C',
xy=(dates[min_idx], temp_diffs[min_idx]),
textcoords="offset points",
xytext=(-10,+15),
va='bottom')
avg_line_y = sum(temp_diffs)/len(temp_diffs)
ax.axhline(y=avg_line_y, color='r', linestyle='--') # 平均温度线
ax.set_title('Daily Temperature Difference in September of Chengdu')
ax.set_xlabel('Date')
ax.set_ylabel('Temperature Difference (°C)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
plot_daily_temperatures(filtered_df)
```
这段脚本不仅展示了如何使用`plt.plot()`方法绘制出一天内温度的变化趋势,同时也运用到了`plt.text()`标记出了最极端的情况点位,并且加入了代表整体平均水平的红线[^3]。
阅读全文