是否可以在 plotly 中创建单个美国州的等值线图?
Is it possible to create a choropleth map of a single US State in plotly?
是否可以创建单个州或彼此相邻的多个州的地图?即仅创建加利福尼亚州、内华达州和亚利桑那州的地图,而不显示美国其他地区?
是的,您可以过滤掉不需要的 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
文件放在您的资产文件夹中。您可以从 original Leaflet example or from here.
中获取
是否可以创建单个州或彼此相邻的多个州的地图?即仅创建加利福尼亚州、内华达州和亚利桑那州的地图,而不显示美国其他地区?
是的,您可以过滤掉不需要的 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
文件放在您的资产文件夹中。您可以从 original Leaflet example or from here.