CSV 文件格式
from pathlib import Path
import csv
import matplotlib.pyplot as plt
from datetime import datetime
path = Path('./weather_data/death_valley_2014.csv')
lines = path.read_text().splitlines() # 以方式读取上面文件, 并且按行分开 (每行都是一个列表, 列表中的每个元素都是字符串)
reader = csv.reader(lines) # 以csv方式解析读取到的文件
header_row = next(reader) # 返回reader里的第一行(在这里就是标题行), next会永久移动reader里的迭代器
# 打印出列表题和下标, 看日期和最低/最高温度的下标
# for index, column_header in enumerate(header_row):
# print(index, column_header)
# 得出, 日期0 最高温度1 最低温度2
# 提取日期、最高温度、最低温度
dates = []
highs = []
lows = []
for row in reader:
date = datetime.strptime(row[0], '%Y-%m-%d')
try:
high = int(row[1])
low = int(row[2])
except ValueError:
print(f"Missing data for {date}")
else:
dates.append(date)
highs.append(high)
lows.append(low)
# 绘图
plt.style.use('seaborn-v0_8')
fig, ax = plt.subplots()
ax.plot(dates, highs, color='red', alpha=0.5) # alpha 设置透明度(0全透明, 1不透明)
ax.plot(dates, lows, color='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # 填充highs与lows之间的区域的颜色为蓝色
ax.set_title("Daily High Temperatures, July 2014", fontsize=24)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate() # 使x轴标签倾斜
ax.set_ylabel("Temperature (F)", fontsize=16)
ax.tick_params(labelsize=16)
plt.show()
制作全球地震散点图: GeoJSON 格式
from pathlib import Path
import json
import plotly.express as px
import pandas as pd
path = Path('./eq_data/all_eq_20231017-12231111.geojson')
try:
contents = path.read_text() # Windows系统默认是unicode, 所以会出现UnicodeDecodeError异常
except:
contents = path.read_text(encoding='utf-8')
all_eq_data = json.loads(contents) # 将json转换成dict
path = Path('eq_data/readable_eq_data.geojson')
readable_eq_data = json.dumps(all_eq_data, indent=4) # 将dict转换成json
path.write_text(readable_eq_data) # 将json写入文件中
all_eq_dicts = all_eq_data['features'] # 取到所有的地震特征
mags = [] # 震级
titles = [] # 标题
lons = [] # 经度
lats = [] # 纬度
for eq_dict in all_eq_dicts:
mag = eq_dict['properties']['mag']
if mag < 0: # 下面画图时, 发现震级居然有负数, 所以这里做一下特殊处理
mag = 0
title = eq_dict['properties']['title']
lon = eq_dict['geometry']['coordinates'][0]
lat = eq_dict['geometry']['coordinates'][1]
mags.append(mag)
titles.append(title)
lons.append(lon)
lats.append(lat)
data = pd.DataFrame(data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级'])
fig = px.scatter(
# x=lons,
# y=lats,
# labels={'x': '经度', 'y': '纬度'},
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图',
size='震级', # 根据震级划分点的大小
size_max=10, # 限制点的大小最大为10
color='震级', # 根据震级划分颜色
hover_name='位置', # 显示地震发生位置
)
# fig.write_html('global_earthquakes.html')
fig.show()