[英]plotly: Highlight / identify certain countries in choropleth
我在 Python 中有以下等值線:
import plotly.offline as py
import plotly.graph_objs as go
countries = ['BDI', 'BEN', 'BFA', 'BWA', 'CIV', 'CMR', 'COD', 'CPV', 'ETH', 'GHA', 'GIN', 'GMB', 'KEN', 'LBR', 'LSO', 'MDG', 'MLI', 'MOZ', 'MUS', 'MWI', 'NER', 'NGA', 'RWA', 'SEN', 'SLE', 'SOM', 'STP', 'TCD', 'TGO', 'TZA', 'UGA', 'ZAF', 'ZMB', 'ZWE']
z = [5, 6, 1, 1, 2, 14, 7, 1, 3, 6, 1, 2, 13, 1, 3, 11, 4, 2, 1, 6, 1, 50, 18, 5, 2, 4, 1, 1, 4, 16, 15, 4, 10, 4]
layout = dict(geo={'scope': 'africa'})
data = dict(
type='choropleth',
locations=countries,
locationmode='ISO-3',
colorscale='Viridis',
z=z)
map = go.Figure(data=[data], layout=layout)
py.plot(map)
我想將一些國家強調為 2 個類別中的 1 個,比如說優先級。 有些是優先級 1,有些是優先級 2,有些是非優先級。 此優先級與 plot 中對應的z
值無關。
在 plot 中,我想從視覺上區分這兩個優先級,以及應保持默認格式的非優先級國家。 不過,所有這些都應該適合相同的色標。
這可以通過改變這些國家的陰影紋理來實現,例如對角線陰影。 或者通過具有獨特的輪廓,例如更粗、不同的顏色或虛線。
抱歉,對於所需的 output 沒有非常具體,我不確定 plotly 的功能,這是使某些國家脫穎而出的結果,無論其 Z32FA6E1B78A9D4028953E60564A2 的重要值如何。 我對人們以前用於此類事情的任何方法持開放態度!
謝謝
我也沒有這方面的經驗,但我會建議兩種方法。
colorscalse
。import plotly.offline as py
import plotly.graph_objs as go
countries = ['BDI', 'BEN', 'BFA', 'BWA', 'CIV', 'CMR', 'COD', 'CPV', 'ETH', 'GHA', 'GIN', 'GMB', 'KEN', 'LBR', 'LSO', 'MDG', 'MLI', 'MOZ', 'MUS', 'MWI', 'NER', 'NGA', 'RWA', 'SEN', 'SLE', 'SOM', 'STP', 'TCD', 'TGO', 'TZA', 'UGA', 'ZAF', 'ZMB', 'ZWE']
z = [5, 6, 1, 1, 2, 14, 7, 1, 3, 6, 1, 2, 13, 1, 3, 11, 4, 2, 1, 6, 1, 50, 18, 5, 2, 4, 1, 1, 4, 16, 15, 4, 10, 4]
layout = dict(geo={'scope': 'africa'})
# colorscalec customize
scl = [[0.0, 'rgb(242,240,247)'],[0.2, 'rgb(218,218,235)'],[0.4, 'rgb(188,189,220)'],\
[0.6, 'rgb(158,154,200)'],[0.8, 'rgb(117,107,177)'],[1.0, 'rgb(84,39,143)']]
data = dict(
type='choropleth',
locations=countries,
locationmode='ISO-3',
colorscale=scl,
autocolorscale = False,
marker = dict(line = dict (color = 'rgb(255,255,255)', width = 2)),
z=z)
map = go.Figure(data=[data], layout=layout)
py.plot(map)
從@r-beginners 開始,我的解決方案是為每個優先級組單獨跟蹤,每個組都有不同顏色的輪廓。 在下面的代碼中,這些跟蹤是使用 function get_trace
定義的。
import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
colour_1 = "rgb(190, 226, 222)"
colour_2 = "rgb(27, 173, 172)"
colour_3 = "rgb(0, 93, 100)"
colourscale = [[0, colour_1],
[0.2, colour_2],
[1, colour_3]]
countries = ['BDI', 'BEN', 'BFA', 'BWA', 'CIV', 'CMR', 'COD', 'CPV', 'ETH', 'GHA', 'GIN', 'GMB', 'KEN', 'LBR', 'LSO', 'MDG', 'MLI', 'MOZ', 'MUS', 'MWI', 'NER', 'NGA', 'RWA', 'SEN', 'SLE', 'SOM', 'STP', 'TCD', 'TGO', 'TZA', 'UGA', 'ZAF', 'ZMB', 'ZWE']
z = [5, 6, 1, 1, 2, 14, 7, 1, 3, 6, 1, 2, 13, 1, 3, 11, 4, 2, 1, 6, 1, 50, 18, 5, 2, 4, 1, 1, 4, 16, 15, 4, 10, 4]
counts = pd.Series(data=z, index=countries)
code_to_priority = {'MLI': 2, 'BWA': 0, 'CPV': 0, 'ZAF': 0, 'TGO': 1, 'COD': 2, 'KEN': 0, 'SSD': 2, 'CIV': 0, 'NGA': 1, 'MWI': 0, 'SOM': 0, 'MUS': 0, 'MRT': 2, 'ETH': 0, 'RWA': 1, 'TZA': 0, 'TCD': 2, 'MOZ': 2, 'LBR': 0, 'MDG': 1, 'GIN': 1, 'LSO': 0, 'BFA': 2, 'BDI': 0, 'SLE': 0, 'CMR': 0, 'SEN': 0, 'BEN': 0, 'GHA': 0, 'NER': 2, 'ZMB': 0, 'ZWE': 0, 'GMB': 0, 'STP': 0, 'UGA': 0}
def get_trace(priority):
line_width = 2
if priority == 0:
outline_params = dict() # no special outline
elif priority == 1:
outline_params = dict(marker=dict(line=dict(
color='rgb(250, 86, 93)',
width=line_width
))) # red outline
else:
outline_params = dict(marker=dict(line=dict(
color='rgb(247, 150, 70)',
width=line_width
))) # orange outline
mask = counts.index.map(code_to_priority) == priority
out = dict(
type='choropleth',
locations=list(counts[mask].index),
locationmode='ISO-3',
colorscale=colourscale,
z=list(counts[mask]),
zmin=0,
zmax=counts.max())
out.update(outline_params)
return out
data_p0 = get_trace(0)
data_p1 = get_trace(1)
data_p2 = get_trace(2)
layout = dict(
geo={'scope': 'africa'},
title='Number of projects supported by the Help Desk, by country',
title_x=0.5)
map = go.Figure(data=[data_p0, data_p2, data_p1], layout=layout)
py.plot(map)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.