首页 > 解决方案 > 是否可以在 plotly 中创建单个美国州的等值线图?

问题描述

是否可以创建单个州或多个彼此相邻的州的地图?即只创建加利福尼亚州、内华达州和亚利桑那州的地图,而不显示美国其他地区?

标签: plotlyplotly-dash

解决方案


是的,您可以过滤掉您不需要的 geojson 功能,即在您的情况下,除了加利福尼亚、内华达和亚利桑那之外的所有州。这是一个使用 Dash Leaflet 演示概念的小型 Dash 应用程序,

import dash
import dash_html_components as html
import json
import dash_leaflet as dl
from dash_leaflet import express as dlx

# Input data.
with open("assets/us-states.json", 'r') as f:
    data = json.load(f)
marks = [0, 10, 20, 50, 100, 200, 500, 1000]
colorscale = ['#FFEDA0', '#FED976', '#FEB24C', '#FD8D3C', '#FC4E2A', '#E31A1C', '#BD0026', '#800026']


def get_style(feature):
    color = [colorscale[i] for i, item in enumerate(marks) if feature["properties"]["density"] > item][-1]
    return dict(fillColor=color, weight=2, opacity=1, color='white', dashArray='3', fillOpacity=0.7)


# Create colorbar.
ctg = ["{}+".format(mark, marks[i + 1]) for i, mark in enumerate(marks[:-1])] + ["{}+".format(marks[-1])]
colorbar = dlx.categorical_colorbar(categories=ctg, colorscale=colorscale, width=300, height=30, position="bottomleft")
# Create geojson.
options = dict(hoverStyle=dict(weight=5, color='#666', dashArray=''), zoomToBoundsOnClick=True)
geojson = dlx.geojson(data, id="geojson", defaultOptions=options, style=get_style)
# Filter out the desired states.
target_states = ["California", "Nevada", "Arizona"]
geojson.data["features"] = [f for f in geojson.data["features"] if f["properties"]["name"] in target_states]
# Create app.
app = dash.Dash()
app.layout = html.Div([dl.Map(children=[dl.TileLayer(), geojson, colorbar], center=[39, -98], zoom=4)],
                      style={'width': '100%', 'height': '50vh', 'margin': "auto", "display": "block"}, id="map")


if __name__ == '__main__':
    app.run_server()

要运行该示例,您必须将us-states.json文件放在资产文件夹中。您可以从原始 Leaflet 示例或从此处获取它。


推荐阅读