簡體   English   中英

如何在 pyplot.go.Figure 和 go.Scattergeo 上繪制國家和國家之間的邊界

[英]How to draw bounderies between countries and countries' states on pyplot.go.Figure with go.Scattergeo

所以,我正在做一個 map,它通過在 map 上畫線來顯示巴西一些城市之間的人流,代表路徑,並根據出現次數設置其不透明度。 為此,我遵循代碼(第三個 map,關於美國航班的代碼)。

我的問題是,我可以畫出國家之間的邊界嗎? 並且,如果可能的話,也在巴西各州之間?

文檔中,有一個名為“geojson”的 function 的參數,但我不確定如何使用它,或者它是否對我有用。

請注意,我有國家和州的 GeoJSON 數據。

這是生成我的 map 的代碼:

import pandas as pd
import plotly.graph_objects as go

fig = go.Figure()

for i in range(len(my_df)):
    fig.add_trace(
        go.Scattergeo(
            lon = [my_df['res_longitude'][i], my_df['nasc_longitude'][i]],
            lat = [my_df['res_latitude'][i], my_df['nasc_latitude'][i]],
            mode = 'lines',
            line = dict(width = 1,color = 'red'),
            opacity = min(1, float(my_df['flow'][i]) / float(my_df['flow'].quantile(.95))),
        )
    )

fig.update_layout(
    showlegend = False,
    margin ={'l':0,'t':0,'b':0,'r':0},
    mapbox = {
    'center': {'lon': -50.3206, 'lat': -16.4984},
    'style': "stamen-terrain",
    'zoom': 3}
)

結果如下:

巴西流量圖

由於我沒有 geojson 數據和經緯度信息來畫線,我將使用您引用的官方參考資料來回答您的問題。

  • 使用choropleth map ,將帶有 0 的總和列添加到此示例中使用的數據中。
  • 將您獲得的 geojson指定geojson=usa_geo
  • 我們將 geojson state 名稱與數據中的 state 相關聯。
  • 我將 map 填充設置為淺灰色。
  • 注意fitbounds的中心設置是自動計算的,因為我們使用的是定位邊界。
from urllib import request
import json
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

# usa geojson data
# https://eric.clst.org/tech/usgeojson/
usa_json = open('./data/gz_2010_us_040_00_500k.json', 'r')
usa_geo = json.load(usa_json)

# Choropleth Maps with go.Choropleth
# https://plotly.com/python/choropleth-maps/
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv')

# https://plotly.com/python/lines-on-maps/
df_flight_paths = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_aa_flight_paths.csv')

# dummy data column
dfs = pd.concat([df, pd.Series([0]*len(df),name='count')], axis=1)

fig = go.Figure()
fig.add_trace(go.Choropleth(
    geojson=usa_geo,
    locations=df['state'],
    z = dfs['count'].astype(float), 
    featureidkey='properties.NAME',
    colorscale = [[0,'rgb(200, 200, 200)']],
    showlegend=False,
    coloraxis=None,
    colorbar=None
))

fig.update_traces(showscale=False)

flight_paths = []
for i in range(len(df_flight_paths)):
    fig.add_trace(
        go.Scattergeo(
            #locationmode = 'USA-states',
            lon = [df_flight_paths['start_lon'][i], df_flight_paths['end_lon'][i]],
            lat = [df_flight_paths['start_lat'][i], df_flight_paths['end_lat'][i]],
            mode = 'lines',
            line = dict(width = 1,color = 'red'),
            opacity = float(df_flight_paths['cnt'][i]) / float(df_flight_paths['cnt'].max()),
            showlegend=False
        )
    )

fig.update_layout(
    autosize=False,
    width=1000,
    height=600,
    margin={"r":0,"t":0,"l":0,"b":0},
    geo=dict(
        scope='north america', # you chenge 'south america'
        fitbounds="locations", # It is associated width 'px.Choropleth'
        visible=True,
        showland=True,
        #center=dict(lon=34.05795, lat=-179.25450), 
        # The center designation of the map has no effect as this is automatically calculated
    )
)

fig.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM