北京东方华美建设集团有限公司网站,网站统计cnzz,临沂网站建设昂牛网络,中山网站建设文化价位目录
0、任务说明
1、解析json文件
2、使用Plotly绘制地理散点图
2.1 函数scatter_geo介绍
2.2 官方示例
3、根据json文件数据#xff0c;准备绘制地理散点图的‘数据结构’
4、完整代码及运行效果 0、任务说明
json文件中存放了关于地震的地理信息。
使用plotly模块…目录
0、任务说明
1、解析json文件
2、使用Plotly绘制地理散点图
2.1 函数scatter_geo介绍
2.2 官方示例
3、根据json文件数据准备绘制地理散点图的‘数据结构’
4、完整代码及运行效果 0、任务说明
json文件中存放了关于地震的地理信息。
使用plotly模块绘制地理散点图。
在世界地图上
1标识地震位置
2用标识的大小表示地震烈度
3当鼠标悬停在标识上时显示详细地震信息
4通过拖拽可以滚动查看地图信息
5可以放大缩小地图查看信息。
最终将绘制完成结果保存为html文件
1、解析json文件
使用json模块。
要打开的json文件放在执行程序所在目录中的data文件夹下。
使用json.dump(all_eq_data,f,indent4)语句改变json的格式用记事本打开时如下所示更易查看。
{type: FeatureCollection,metadata: {generated: 1550361461000,url: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_day.geojson,title: USGS Magnitude 1.0 Earthquakes, Past Day,status: 200,api: 1.7.0,count: 158},features: [{type: Feature,properties: {mag: 0.96,place: 8km NE of Aguanga, CA,time: 1550360775470,updated: 1550360993593,tz: -480,url: https://earthquake.usgs.gov/earthquakes/eventpage/ci37532978,detail: https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37532978.geojson,felt: null,cdi: null,mmi: null,alert: null,status: automatic,tsunami: 0,sig: 14,net: ci,code: 37532978,ids: ,ci37532978,,sources: ,ci,,types: ,geoserve,nearby-cities,origin,phase-data,,nst: 32,dmin: 0.02648,rms: 0.15,gap: 37,magType: ml,type: earthquake,title: M 1.0 - 8km NE of Aguanga, CA},geometry: {type: Point,coordinates: [-116.7941667,33.4863333,3.22]},id: ci37532978},语句all_eq_dicts all_eq_data[features]将json文件中‘features’下的所有元素放在all_eq_dicts中。
语句mags [eq_dict[properties][mag] for eq_dict in all_eq_dicts]将每个元素中‘properties’下的‘mag’值存在列表mags中。这里使用了列表解析。
import jsonfilename data/eq_data_1_day_m1.json
with open(filename) as f:all_eq_data json.load(f)readable_file data/readable_eq_data.json#重写json文件使其便于阅读
with open(readable_file,w) as f:json.dump(all_eq_data,f,indent4)all_eq_dicts all_eq_data[features]mags [eq_dict[properties][mag] for eq_dict in all_eq_dicts]
titles [eq_dict[properties][title] for eq_dict in all_eq_dicts]
longitudes [eq_dict[geometry][coordinates][0] for eq_dict in all_eq_dicts]
latitudes [eq_dict[geometry][coordinates][1] for eq_dict in all_eq_dicts]
2、使用Plotly绘制地理散点图
2.1 函数scatter_geo介绍
Plotly Express 中的 scatter_geo 函数是用于创建地理散点图的函数。它允许用户轻松地在地图上绘制数据点每个数据点表示一个地理位置并且可以根据数据中的某些属性来自定义数据点的颜色、大小等。
该函数的基本语法如下
px.scatter_geo(data_frame, latNone, lonNone, locationsNone, locationmodeNone, colorNone, sizeNone, hover_nameNone, hover_dataNone, projectionNone, animation_frameNone, titleNone, templateNone, widthNone, heightNone)其中主要参数包括data_frame必须输入其余根据需要选择使用
data_frame: 包含数据的 DataFrame 对象。lat 和 lon: 分别指定纬度和经度数据所在的列名。locations: 指定用于标识地理位置的列名。color 和 size: 分别指定数据点的颜色和大小所对应的列名。hover_name 和 hover_data: 分别指定悬停时显示的标签和其他数据。projection: 指定地图投影的类型如 equirectangular、mercator 等。animation_frame: 如果要创建动画效果可以指定用于动画的时间序列数据所在的列名。title: 图表的标题。template: 图表的模板。width 和 height: 图表的宽度和高度。
2.2 官方示例
import plotly.express as px
px.data.gapminder() 是 Plotly Express 提供的一个函数
用于加载示例数据集 gapminder。
这个数据集包含了关于世界各国在不同年份的人口、GDP 等数据。
.query(year 2007) 是 Pandas 数据框DataFrame对象的一个方法
用于查询符合特定条件的数据。在这里它筛选出年份为 2007 年的数据。df px.data.gapminder().query(year 2007)
基于给定的数据集 df创建一个地理散点图
其中每个点表示一个国家其位置由 ISO 3166-1 #alpha-3 代码指定
点的大小表示该国的人口数量。fig px.scatter_geo(df, locationsiso_alpha,sizepop, # size of markers, pop is one of the columns of gapminder)fig.update_layout(margin{r:0,t:0,l:0,b:0})fig.show()
运行结果 3、根据json文件数据准备绘制地理散点图的‘数据结构’
根据第一部分的说明解析后的json数据是放在四个列表中的此时这四个列表必须构成DataFrame对象才能被scatter_geo 函数使用具体方法如下
import pandas as pdmags [eq_dict[properties][mag] for eq_dict in all_eq_dicts]
titles [eq_dict[properties][title] for eq_dict in all_eq_dicts]
longitudes [eq_dict[geometry][coordinates][0] for eq_dict in all_eq_dicts]
latitudes [eq_dict[geometry][coordinates][1] for eq_dict in all_eq_dicts]#根据以上数据创建‘字典’
data {mags:mags,titles:titles,longitudes:longitudes,latitudes:latitudes}
# 使用字典创建 DataFrame
df pd.DataFrame(data)
以上数据中
mags是地震烈度决定地图上标志点大小
titles是地震信息鼠标悬停在标志点上时显示
longitudes是经度决定标志点在地图上的位置
latitudes是纬度。
4、完整代码及运行效果
import json
import plotly.express as px
import pandas as pd#准备数据
filename data/eq_data_1_day_m1.json
with open(filename) as f:all_eq_data json.load(f)all_eq_dicts all_eq_data[features]mags [eq_dict[properties][mag] for eq_dict in all_eq_dicts]
titles [eq_dict[properties][title] for eq_dict in all_eq_dicts]
longitudes [eq_dict[geometry][coordinates][0] for eq_dict in all_eq_dicts]
latitudes [eq_dict[geometry][coordinates][1] for eq_dict in all_eq_dicts]#根据以上数据创建‘字典’
data {mags:mags,titles:titles,longitudes:longitudes,latitudes:latitudes}
# 使用字典创建 DataFrame
df pd.DataFrame(data)
fig px.scatter_geo(df,latlatitudes,lonlongitudes,sizemags,hover_nametitles)fig.update_layout(margin{r: 0, t: 0, l: 0, b: 0})fig.write_html(global_earthquakes.html)
fig.show()