练习16-8:最近发生的地震
《Python编程:从入门到实践》练习16-8_笨小古的博客-CSDN博客
练习16-9:全球火灾 —— 在本章的配套资源中,有一个名为world_fires_1_day.csv的文件。它包含了有关全球各地发生的火灾信息,包含经度、纬度和火灾强度(brightness)。使用数据处理技术和散点图绘制技术,绘制一幅散点图来展示全球哪些地方发生了火灾。
import csv
import plotly.express as px
import pandas as pd
filename = 'data/world_fires_1_day.csv'
with open(filename) as f:
reader = csv.reader(f)
header_now = next(reader)
lons = []
lats = []
bris = []
# 获取经度、纬度、火灾强度
for row in reader:
lon = float(row[1])
lat = float(row[0])
bri = float(row[2])
lons.append(lon)
lats.append(lat)
bris.append(bri)
data = pd.DataFrame(data=zip(lons, lats, bris), columns=['经度', '纬度', '火灾强度'])
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
# x=lons,
# y=lats,
# labels={'x': '经度', 'y': '纬度'},
range_x=[-200, 200],
range_y=[-90, 90],
width=1000,
height=800,
title='全球火灾信息',
# 定制标记的尺寸
size='火灾强度',
size_max=10,
color='火灾强度', # 默认的视觉映射图例渐变色范围是从蓝到红再到黄,数值越小则标记越蓝,而数值越大则标记越黄
)
fig.write_html('world_fires.html')
fig.show()
可视化结果:
地理可视化:
先介绍一下两个函数:
import plotly.graph_objects as go
go.Densitymapbox()函数和go.update_layout()函数
Densitymapbox(arg=None, autocolorscale=None, below=None, coloraxis=None,
colorbar=None, colorscale=None, customdata=None, customdatasrc=None,
hoverinfo=None, hoverinfosrc=None, hoverlabel=None, hovertemplate=None,
hovertemplatesrc=None, hovertext=None, hovertextsrc=None, ids=None,
idssrc=None, lat=None, latsrc=None, lon=None, lonsrc=None, meta=None,
metasrc=None, name=None, opacity=None, radius=None, radiussrc=None,
reversescale=None, showscale=None, stream=None, subplot=None,
text=None, textsrc=None, uid=None, uirevision=None, visible=None,
z=None, zauto=None, zmax=None, zmid=None, zmin=None, zsrc=None, **kwargs)
lon 设置经度坐标(东经)
lat 设置纬度坐标(北纬)
z 设置数据点的权重
举例, 值10等于在同一位置的10个权重为1的点
radius 设置 'lon'/'lat'点的影响半径(以像素为单位)
增大该值可使densitymapbox trace更平滑, 但细节更少
hovertext 设置与每个(lon, lat)对关联的悬停文本元素
如果是单个字符串, 则相同的字符串出现在所有数据点上; 如果是字符串数组,
则数组中的字符串将会依次映射到对应的(lon, lat)坐标
为了能被看见, 'hoverinfo'参数必须包含'text'
hoverinfo 决定在悬停时显示哪些trace的信息, 如'text'
如果设置为'none'或'skip', 则悬停时不会显示任何信息.
(如果设置为'none'仍会触发点击和悬停事件)
update_layout()作用是来修改图像的标题, 坐标轴的名称等,更新图像布局,与go.Layout()相关。
Layout(arg=None, angularaxis=None, annotations=None, annotationdefaults=None,
autosize=None, bargap=None, bargroupgap=None, barmode=None, barnorm=None,
boxgap=None, boxgroupgap=None, boxmode=None, calendar=None, clickmode=None,
coloraxis=None, colorscale=None, colorway=None, datarevision=None,
direction=None, dragmode=None, editrevision=None, extendfunnelareacolors=None,
extendpiecolors=None, extendsunburstcolors=None, font=None,
funnelareacolorway=None, funnelgap=None, funnelgroupgap=None, funnelmode=None,
geo=None, grid=None, height=None, hiddenlabels=None, hiddenlabelssrc=None,
hidesources=None, hoverdistance=None, hoverlabel=None, hovermode=None,
images=None, imagedefaults=None, legend=None, mapbox=None, margin=None,
meta=None, metasrc=None, modebar=None, orientation=None, paper_bgcolor=None,
piecolorway=None, plot_bgcolor=None, polar=None, radialaxis=None, scene=None,
selectdirection=None, selectionrevision=None, separators=None, shapes=None,
shapedefaults=None, showlegend=None, sliders=None, sliderdefaults=None,
spikedistance=None, sunburstcolorway=None, template=None, ternary=None,
title=None, titlefont=None, transition=None, uirevision=None, updatemenus=None,
updatemenudefaults=None, violingap=None, violingroupgap=None, violinmode=None,
waterfallgap=None, waterfallgroupgap=None, waterfallmode=None, width=None,
xaxis=None, yaxis=None, **kwargs)
mapbox
plotly.graph_objects.layout.Mapbox实例 或 兼容性的属性的字典
accesstoken 设置要用于此Mapbox地图的Mapbox访问令牌
style 内置的style: basic, streets, outdoors, light, dark, satellite,
satellite-streets
zoom 设置地图的放大级别, 整数或浮点数
center 地图中点, 传入一个经纬度的字典即可
如{"lat": 34.6, "lon": 105.69}
layers 'layers'属性是Layer实例的元组, 可以指定为
- plotly.graph_objs.layout.mapbox.Layer实例的列表或元组
- 传递给Layer构造函数的字符串/值属性的字典列表或元组
below 是否将图层插入到指定ID的图层之前
如果省略或设为'', 该层就会被插入到每个现有层的上方
sourcetype 设置图层的source类型, 即图层数据的类型
source 设置图层的source data
当'sourcetype'为'geojson'时, 'source'可以是一个GeoJSON对象
或一个指向GeoJSON的URL;
当'sourcetype'为'vector'或'raster'时, 'source'可以是一个
URL或URLs的数组;
当'sourcetype'为'image'时, 'source'可以是一个指向image
的URL
title plotly.graph_objects.layout.Title 或 兼容性的属性的字典
text 设置图表标题
font 设置标题字体, plotly.graph_objs.layout.title.Font实例或对应的字典
size 设置字体大小
x 在从0(左)到1(右)的归一化坐标中, 设置相对于'xref'的x位置
xref 设置x参考的container, 默认为'container'
'container'指横跨整个图表区域的宽度
'paper'仅指画图区域的宽度
font 设置全局字体
注意, traces和其他layout components中使用的字体继承自全局字体
常用属性有:
color
plot_bgcolor 设置x和y轴之间(in-between)的绘图区域的颜色
paper_bgcolor 设置绘制图形的纸张的颜色
xaxis plotly.graph_objects.layout.XAxis实例 或 兼容性的属性的字典
常用属性有
title x轴的坐标轴标签
type 设置轴类型.
默认情况下, plotly尝试通过查看提到axis的traces的数据来确定轴类型
['-', 'linear', 'log', 'date', 'category', 'multicategory']之一
hovermode 确定悬停交互的模式
如果'clickmode'包含'select', 则'hovermode'默认为'closest'
如果'clickmode'缺少'select', 则对于笛卡尔坐标的绘图,
默认值为'x'或'y'(取决于trace的'orientation'值). 对于其他任何内容,
默认值为'closest'
legend plotly.graph_objects.layout.Legend 或 兼容性的属性的字典
常用属性有
x 设置图例的x位置(标准化坐标中), 坐标原点在左下角
y 设置图例的y位置(标准化坐标中), 坐标原点在左下角
height 设置图像的高度(以像素为单位)
必须指定为大于等于10的整数或浮点数
width 设置图像的宽度(以像素为单位)
必须指定为大于等于10的整数或浮点数
margin plotly.graph_objects.layout.Margin实例 或 兼容性的属性的字典
l 设置左边距(以像素为单位)
r 设置右边距(以像素为单位)
t 设置顶部距(以像素为单位)
b 设置底部距(以像素为单位)
代码展示:
import plotly.graph_objects as go
import pandas as pd
data = pd.read_csv('data/world_fires_1_day.csv')
data.head()
fire_map = go.Densitymapbox(lat=data['latitude'], lon=data['longitude'], z=data['brightness'], radius=4)
# radius:每个热点的辐射半径
fig = go.Figure(fire_map)
fig.update_layout(title='全球火灾信息', mapbox_style="open-street-map")
fig.show()