我很难让plotly.express.line_mapbox()
用正确的颜色呈现线条。这些行的值为0..100%,表示每行的使用情况。从其他SO问题和网站上,我是这样处理的:
norm = matplotlib.colors.Normalize(0, 100)
colors = [[norm(0), "green"],[norm(60), "yellow"],[norm(100), "red"]]
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", colors)
然后,我通过以下方式指定每种颜色:
RGBa = cmap(percUsage)
colors.append(f'rgb({int(255 * RGBa[0])}, {int(255 * RGBa[1])}, {int(255 * RGBa[2])})')
其中percUsage = 0..100
关于这一点,我正在用每行数据构建我的Dataframe
,然后创建图形
df = pd.DataFrame(data=dict(name=names, lat=lats, lon=lons, load=loads, color=colors, hover=hoverText))
fig = px.line_mapbox(df, lat='lat', lon='lon', line_group='name', color='color')
但是,尽管c.test_colormap(cmap)
显示了预期的颜色,但plotly.express.line_mapbox()
在颜色方面表现得完全怪异。屏幕截图显示了使用值为9的一行。我不明白,为什么它会打印出蓝色,它甚至不应该出现在我的颜色光谱中。其他颜色为绿色或红色,但与percUsage
无关。我似乎错过了一些重要的事情
感谢您的帮助:)
所以我设法解决了我的问题,并愿意分享我的发现,以防有人在这个问题上绊倒。在这里您可以找到docs
TL;DR和我的主要收获:
使用带有
str
键和十六进制颜色(str
)的离散颜色映射(dict
),而dataframes
的(df)“颜色”列则用discr_map
中使用的对应键填充我真的不明白
dataframe
的colors
列为什么不能使用rgb(255,100,0)
格式。也许这里也需要十六进制格式-我会在某个时候检查一下。这令人困惑,因为其他mapbox
可以处理rgb
格式。由于这个原因,它正在回落到它的标准颜色范围,这显然让我感到困惑然后我研究了
color_discrete_map
参数,并使其最终起作用这就是我创建离散颜色贴图的方式。我认为这里最重要的一点是使用
N=101
(或任何您需要的值范围)将频谱规格化为0..100
范围内的值然后将其传递到figures
color_discrete_map
参数中:相关问题 更多 >
编程相关推荐