16.1 CSV文件格式
csv文件:将数据以列逗号分隔存储
准备工作:
从官方网站下载所需数据包,在“源代码文件\chapter_16\the_csv_file_format\data”中找到“death_valley_2018_simple.csv”,并将整个data文件夹放到代码文件目录内
csv文件windows默认打开方式为excel,我们分别用excel和文本方式打开看看里面的数据到底长什么样子:
excel方式打开:
文本方式打开:
16.1.1 分析CSV文件头
csv模块包含在python标准库中
新建skita.py文件,要求data文件夹和skita,py在同一目录下
# skita.py
import csv
filename = r"data/sitka_weather_07-2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f) #生成一个阅读对象并赋值给reader
header_row = next(reader) #next()是读取下一行,第一次读取第一行,读取的内容存在列表中
print(header_row)
输出:
[‘STATION’, ‘NAME’, ‘DATE’, ‘PRCP’, ‘TAVG’, ‘TMAX’, ‘TMIN’]
16.1.2 打印文件头及其位置
为了让头文件更让人容易理解,打印头文件的索引和值
这样我们就知道哪一列代表什么数据了
# skita.py
import csv
filename = r"data/sitka_weather_07-2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# header_row 存储的是第一行的数据的列表
for index, column_header in enumerate(header_row):
# enumerate()获取参数的索引即其值
print(index, column_header)
16.1.3 提取并读取数据
本小节我们的任务是提取每天的最高温度
# skita.py
import csv
filename = r"data/sitka_weather_07-2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取最高温度
highs = []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第6个元素
for row in reader:
high = int(row[5]) # 需要字符串转化为整数
highs.append(high)
print(highs)
输出:
[62, 58, 70, 70, 67, 59, 58, 62, 66, 59, 56, 63, 65, 58, 56, 59, 64, 60, 60, 61, 65, 65, 63, 59, 64, 65, 68, 66, 64, 67, 65]
16.1.4 绘制温度图表
本小节的任务是创建一个显示每日最高温度的简单图形
# skita.py
import csv
import matplotlib.pyplot as plt
filename = r"data/sitka_weather_07-2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取最高温度
highs = []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第6个元素
for row in reader:
high = int(row[5])
highs.append(high)
# 根据最高温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(highs, c='red') # 红色显示高温
# 设置图形的格式
ax.set_title("2018年7月每日最高温度", fontsize=24)
ax.set_xlabel('', fontsize=14)
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序,结果如下图:
16.1.5 模块datetime
本小节的任务是了解datetime模块中的datetime类中的方法strptime()
from datetime import datetime
#strptime()第一个参数是需要输出的实参,第二个参数是输出的格式
first_date = datetime.strptime('2018-07-01', '%Y-%m-%d')
print(first_date)
输出:
2018-07-01 00:00:00
datetime中设置日期和实践的格式
实参 含义 %A 星期几,如Monday %B 月份名,如January %m 用数表示的月份(01-12) %d 用数表示的月份中的一天(01-31) %Y 四位的年份,如2019 %y 两位的年份,如19 %H 24小时的小时数(11-23) %I 12小时的小时数(00-12) %p am或pm %M 分钟数(00-59) %S 秒数(00-61)
16.1.6 在图表中添加日期
本小节的主要任务是将日期添加至横坐标轴
时间在csv数据的第三列
# skita.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/sitka_weather_07-2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期和最高温度
dates, highs = [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3和第6个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[5])
dates.append(current_date)
highs.append(high)
# 根据最高温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red') # 红色显示高温
# 设置图形的格式
ax.set_title("2018年7月每日最高温度", fontsize=24)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序,见下图:
16.1.7 涵盖更长的时间
本小节将生成一副更复杂的天气图,读取的是“sitka_weather_2018_simple.csv”数据
skita.py代码如下:
# skita.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/sitka_weather_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期和最高温度
dates, highs = [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3和第6个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[5])
dates.append(current_date)
highs.append(high)
# 根据最高温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red') # 红色显示高温
# 设置图形的格式
ax.set_title("2018年每日最高温度", fontsize=24)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序,显示如下图:
16.1.8 再绘制一个数据系列
本小节的主要任务是添加最低气温数据,并显示到图表中
# skita.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/sitka_weather_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期、最高温度和最低气温
dates, highs, lows = [], [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3、6、7个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[5])
low =int(row[6])
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据最高、最低温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red') # 红色显示高温
ax.plot(dates, lows, c='blue') #蓝色显示低温
# 设置图形的格式
ax.set_title("2018年每日最高、最低温度", fontsize=24)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序,见下图:
16.1.9 给图标区域着色
本小节的任务是对每天的温度范围进行着色,使用的方法是fill_between(),前三个参数是x轴坐标和两个y值坐标,表示填充y值之间的区域,facecolor是填充区域颜色,alpha是透明度,0-1,0表示完全透明,1(默认)表示完全不透明
# skita.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/sitka_weather_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期、最高温度和最低气温
dates, highs, lows = [], [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3、6、7个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[5])
low =int(row[6])
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据最高、最低温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # 红色显示高温
ax.plot(dates, lows, c='blue', alpha=0.5) #蓝色显示低温
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.3)
# 设置图形的格式
ax.set_title("2018年每日最高、最低温度", fontsize=24)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序,见下图:
16.1.10 错误检查
csv文件中的数据很多,有偶发的错误完全是有可能的,这时我们该怎么办?
death_valley_2018_simple.csv 文件中有一处错误,我们现在当成不知道,新建一个death_valley.py的文件,将skita.py中的代码复制过来进行修改
1 检查 death_valley_2018_simple.csv的文件头
#death_valley.py
import csv
filename = r"data/death_valley_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
for index, column_header in enumerate(header_row):
print(index, column_header)
输出:
0 STATION
1 NAME
2 DATE
3 PRCP
4 TMAX
5 TMIN
6 TOBS
发现日期为第2列,最高气温位第5列,最低气温为第6列
2 在death_valley.py中修改代码
主要修改索引下标,将最高温度和最低温度存入列表中
#death_valley.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/death_valley_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期、最高温度和最低气温
dates, highs, lows = [], [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3、5、6个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
high = int(row[4])
low =int(row[5])
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据最高、最低温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # 红色显示高温
ax.plot(dates, lows, c='blue', alpha=0.5) #蓝色显示低温
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.3)
# 设置图形的格式
ax.set_title(""2018年每日最高、最低温度\n死亡谷", fontsize=20)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
运行程序,发现报错了,究其原因,是因为文件 death_valley_2018_simple.csv 中的2018-02-18的数据有缺失,程序无法将空字符‘’转换为整数
此时,我们使用异常处理语句,对异常情况进行处理(只输出提示性语句,不做任何处理,直接执行后续程序)
下图代码错误提示信息:
下图是文件中缺失数据的地方:
3 修改death_valley.py,使用异常处理
#death_valley.py
import csv
import matplotlib.pyplot as plt
from datetime import datetime
filename = r"data/death_valley_2018_simple.csv"
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
# 从文件中读取日期、最高温度和最低气温
dates, highs, lows = [], [], []
# 由于已读取第一行,这里从第二行开始读取,每次读取该行的第3、5、6个元素
for row in reader:
current_date = datetime.strptime(row[2], "%Y-%m-%d")
# 异常处理:
try:
high = int(row[4])
low = int(row[5])
except ValueError:
print(f"Missing date for {current_date}")
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据最高、最低温度绘制图形
plt.style.use("Solarize_Light2") #seaborn 样式无法正确显示中文
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # 红色显示高温
ax.plot(dates, lows, c='blue', alpha=0.5) #蓝色显示低温
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.3)
# 设置图形的格式
ax.set_title("2018年每日最高、最低温度\n死亡谷", fontsize=20)
ax.set_xlabel('', fontsize=14)
fig.autofmt_xdate() # fig.autofmt_xdate()用来绘制倾斜的日期,防止重叠
ax.set_ylabel('温度(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
执行程序发现,程序对缺失数据知识输出了提示性信息,但继续执行了程序,生成的图片跳过了那一天,也没有产生过多问题,见下图:
16.1.11 自己动手下载数据
按教材程序应该可以实现,亲测网站有点慢,但是可以正常登录
略
16.2 制作全球地震散点图:JSON格式
读取以jison格式村粗的地震数据,使用模块json处理,并用Ploty模块绘制散点图
准备工作:
将从官方网站下载所需数据包,在“源代码文件源代码文件\chapter_16\mapping_global_data_sets\data”中的所有数据放放到代码文件目录内
16.2.1 地震数据
检查date文件夹内是否有 eq_data_1_day_m1.json 文件,该文件记录了24小时全球不低于1级地震的信息
16.2.2 查看JSON数据
1查看数据
使用文本方式打开 eq_data_1_day_m1.json 文件,发现有158行,最长的一列近800列,数据看着很凌乱,仔细观察发现,这是一个字典文件,一行是一个字典,每个字典元素又嵌套字典
如下图所示:
2将数据以易读方式显示
新建一个explore_data.py 文件:
- 将 eq_data_1_day_m1.json 读取进来
- 新建一个易读文件readable_data.json
- 将eq_data_1_day_m1.json 数据处理后放到readable_data.json文件中
# explore_data.py
import json
# 读取数据
filename = r'data/eq_data_1_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 新建一个易读文件readable_data.json
readable_file = 'data/readable_data.json'
with open(readable_file, 'w') as f:
# 处理数据后移入易读文件中
json.dump(all_data, f, indent=4) # 与结构匹配的缩进来设置数据格式
执行程序,在data目录下生成一个readable_data.json文件,打开后发现很有层次性
见下图:
关于文件的一些说明:
- 键 ‘metadata’ ,指出数据文件在什么时候生成,在哪个网站上可以找到,还有标题和地震次数
- 键 ‘features’中存储地震信息,列表中的每个元素对应一次地震
- 特定的某次地震中,键"properties"关联地震相关的大量信息,“mag”: 0.96表示震级;键"geometry"指出了地震发生的地点,"coordinates"表示地震发生的经度和纬度
16.2.3 创建地震列表
因为键 ‘features’中存储地震信息,它是一个列表,列表中的每个元素代表一次地震
完善 explore_data.py
# explore_data.py
import json
# 读取数据
filename = r'data/eq_data_1_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 将所有地震信息读取到一个列表中
all_dicts = all_data['features']
print(len(all_dicts))
输出:
158
表明我们提取了158次地震信息
16.2.4 提取震级
从地震数据中提取震级数据
如果我们向获取列表中第一个元素(即第一次地震)的震级,我们要这样读取:
all_dicts[0][“properties”][“mag”],这样就可以读取到震级为0.96
完善explore_data.py
# explore_data.py
import json
# 读取数据
filename = r'data/eq_data_1_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 将所有地震信息读取到一个列表中
all_dicts = all_data['features']
# 提取震级
mags =[]
for eq_dict in all_dicts:
mag = eq_dict['properties']['mag']
mags.append(mag)
print(mags[:10]) # 只打印前10次地震的震级
输出:
[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]
16.2.5提取位置信息
标题存储在"properties"键下的"title"键中
位置信息存储在"geometry"键下的"coordinates"键下,前两个值为经度和纬度
完善explore_data.py
# 读取数据
filename = r'data/eq_data_1_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 将所有地震信息读取到一个列表中
all_dicts = all_data['features']
# 提取震级、标题和位置信息
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_dicts:
mag = eq_dict['properties']['mag']
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)
print(mags[:10])
print(titles[:2])
print(lons[:5])
print(lats[:5])
输出:
[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]
[‘M 1.0 - 8km NE of Aguanga, CA’, ‘M 1.2 - 11km NNE of North Nenana, Alaska’]
[-116.7941667, -148.9865, -74.2343, -161.6801, -118.5316667]
[33.4863333, 64.6673, -12.1025, 54.2232, 35.3098333]
16.2.6 绘制震级散点图
新建一个world_map.py文件,用来绘制震级散点图
注意:完全按照书上会出错,要解决两个问题:
- 安装pandas模块,安装方法为: win + r 输入cmd 进入命令行界面,输入 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandas 自动安装
- 由于lons,lats等数据在另一个py文件,可以用导入的方法,也可以用把代码挪过来的方法,我这里使用的是导入方法
- 导入后发现,代码输出了测试代码,所以要在explore_data.py中增加一行if代码
# world_map.py
import plotly.express as px
import explore_data as ep
import pandas
fig = px.scatter(
x=ep.lons,
y=ep.lats,
labels={'x':'经度', 'y': '纬度'},
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图'
)
fig.write_html('globla_earthquakes.html')
fig.show()
修改后的# explore_data.py
# explore_data.py
import json
# 读取数据
filename = r'data/eq_data_1_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 将所有地震信息读取到一个列表中
all_dicts = all_data['features']
# 提取震级、标题和位置信息
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_dicts:
mag = eq_dict['properties']['mag']
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)
if __name__ == '__main__':
print(mags[:10])
print(titles[:2])
print(lons[:5])
print(lats[:5])
执行world_map.py,效果如下图:
16.2.7 另一种指定图表数据的方式
新建一个test.py,将 world_map.py 中代码复制过来,按照书中的配置方式进行修改
执行程序,发现与上一节的结果一摸一样
课本中说推荐这种方式
# test.py
import plotly.express as px
import explore_data as ep
import pandas as pd
data = pd.DataFrame(
zip(ep.lons, ep.lats, ep.titles, ep.mags),columns=['经度', '纬度', '位置', '震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图'
)
fig.write_html('globla_earthquakes.html')
fig.show()
执行程序效果图:
16.2.8 定制标记的尺寸
上节的散点图显示了每次地震的位置,但没有指出震级,我们添加此标记
从此处开始,我们使用16.2.7小节中的test.py的代码,并在该代码中进行修改
# test.py
import plotly.express as px
import explore_data as ep
import pandas as pd
data = pd.DataFrame(
zip(ep.lons, ep.lats, ep.titles, ep.mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图',
size='震级',
size_max=10, #标记尺寸默认20,此处设置为10
)
fig.write_html('globla_earthquakes.html')
fig.show()
执行程序,效果如图:
16.2.9 定制标记的颜色
本小节我们定制标记的颜色,以呈现地震的严重程度
首先我们将装在文件修改为: eq_data_30_day_m1.json ,该文件包含30天数据,呈现出来的散点更多,所以要先修改 explore_data.py 中的 filename 变量
# explore_data.py
import json
# 读取数据
filename = r'data/eq_data_30_day_m1.json '
with open(filename) as f:
all_data = json.load(f)
# 将所有地震信息读取到一个列表中
all_dicts = all_data['features']
# 提取震级、标题和位置信息
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_dicts:
mag = eq_dict['properties']['mag']
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)
if __name__ == '__main__':
print(mags[:10])
print(titles[:2])
print(lons[:5])
print(lats[:5])
# test.py
import plotly.express as px
import explore_data as ep
import pandas as pd
data = pd.DataFrame(
zip(ep.lons, ep.lats, ep.titles, ep.mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图',
size='震级',
size_max=10,#标记尺寸默认20,此处设置为10
color='震级',# 默认颜色是蓝->红->黄
)
fig.write_html('globla_earthquakes.html')
fig.show()
执行程序,效果如下图:
16.2.10 其它渐变
Plotly Express 有大量的渐变可供选择,程序color.py告诉你可使用哪些渐变
# color.py
import plotly.express as px
for key in px.colors.named_colorscales():
print(key)
'''
输出:
···
blues
blugrn
bluyl
brwnyl
bugn
bupu
burg
burgyl
cividis
darkmint
electric
emrld
gnbu
greens
greys
hot
inferno
jet
···
'''
输出很多,这里只选了一部分
修改16.2.11小节的test.py代码,看看’jet’样式如何?
# test.py
import plotly.express as px
import explore_data as ep
import pandas as pd
data = pd.DataFrame(
zip(ep.lons, ep.lats, ep.titles, ep.mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图',
size='震级',
size_max=10,#标记尺寸默认20,此处设置为10
color='震级', # 默认颜色是蓝->红->黄
hover_name='位置',
color_continuous_scale='jet', # 渐变色参数选择
)
fig.write_html('globla_earthquakes.html')
fig.show()
执行程序,效果如下:
16.2.11 添加鼠标指向时显示的文本
在16.2.9de test.py代码上修改,新增添加显示地震的大概位置
# test.py
import plotly.express as px
import explore_data as ep
import pandas as pd
data = pd.DataFrame(
zip(ep.lons, ep.lats, ep.titles, ep.mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200, 200],
range_y=[-90, 90],
width=800,
height=800,
title='全球地震散点图',
size='震级',
size_max=10,#标记尺寸默认20,此处设置为10
color='震级', # 默认颜色是蓝->红->黄
hover_name='位置',
)
fig.write_html('globla_earthquakes.html')
fig.show()
执行代码,显示如下图:
16.3 小结
略