簡體   English   中英

plotly:突出顯示/識別 choropleth 中的某些國家/地區

[英]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 的重要值如何。 我對人們以前用於此類事情的任何方法持開放態度!

謝謝

我也沒有這方面的經驗,但我會建議兩種方法。

  1. 划定國家的邊界。
  2. 自定義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.

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