《Python编程:从入门到实践》练习16-9

练习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()

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨小古

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值