我在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)我想将一些国家分为两类中的一类,比如说优先级。一些是优先级1,一些是优先级2,还有一些是非优先级。此优先级与绘图中相应的z值无关。
在图中,我想从视觉上区分两个优先级级别,以及它们与非优先级国家/地区之间的区别,这些国家/地区应该保持默认格式。不过,所有的颜色都应该符合相同的色阶。
这可以通过更改这些国家的阴影纹理来实现,例如对角线阴影。或者通过具有独特的轮廓,例如更粗、不同的颜色或虚线。
很抱歉没有非常具体地说明所需的输出,我不确定plotly的能力,这是让一些国家脱颖而出的结果,而不考虑它们的情节价值,这很重要。我对人们以前用过的任何方法都持开放态度!
谢谢
发布于 2020-06-25 13:20:59
我在这方面也没有经验,但我建议两种方法。
定义country.
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)

发布于 2020-06-25 18:52:09
我的解决方案是,从@r-beginners开始,为每个优先级组都有一个单独的轨迹,每个优先级组都有不同的颜色轮廓。在下面的代码中,这些跟踪是用函数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)https://stackoverflow.com/questions/62566708
复制相似问题