Сюжетно: изменить цвет фона для областей полярной карты

Возник вопрос о том, как раскрасить кольца сюжетно-полярной карты. Я хотел бы добавить разные цвета фона в зависимости от категорий.

Рассмотрим рейтинг навыков, в котором хотелось бы выделить вид навыка в общем обзоре:

import plotly.graph_objects as go

categories = [
    "[lang] English", "[lang] Spanish", "[lang] German",
    "[dev] JS", "[dev] Python", "[dev] Go", "[dev] C#",
    "[skill] leadership", "[skill] creativity"
]
# remove prefix, this should be reflected by the background color
categories = [c.split("] ")[1] for c in categories]

ratings = {
    "Alice": [4,5,0,3,4,5,2,3,5],
    "Bob":   [3,1,4,2,3,1,1,3,2],
}

fig = go.Figure()

for name in ratings.keys():
    fig.add_trace(go.Scatterpolar(
        r=ratings[name] + [ratings[name][0]],
        theta=categories + [categories[0]],
        name=name,
    ))


fig.show()

Можно ли выделить тип категорий, изменив цвет фона, чтобы он выглядел как этот (поддельный) пример?

Я поискал в сети разные варианты, но нашел только другой вопрос, на который указал.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать, добавив к текущей фигуре трассу go.Barpolar , где категории располагаются вдоль угловой оси так же, как и для трассы Scatterpolar, и где на радиальной оси величина одинакова для все столбцы, то есть максимальное значение ratings (чтобы цветные области равномерно охватывали полярную диаграмму). Укажите цвет каждого фрагмента категории, используя свойство marker_color.

categories = [
    "[lang] English", "[lang] Spanish", "[lang] German",
    "[dev] JS", "[dev] Python", "[dev] Go", "[dev] C#",
    "[skill] leadership", "[skill] creativity"
]

kinds = [re.search('^\[(.+)\]', c).group(1) for c in categories]
categories = [c.split("] ")[1] for c in categories]

ratings = {
    "Alice": [4,5,0,3,4,5,2,3,5],
    "Bob":   [3,1,4,2,3,1,1,3,2],
}

fig = go.Figure()

for name in ratings.keys():
    fig.add_trace(go.Scatterpolar(
        r=ratings[name] + [ratings[name][0]],
        theta=categories + [categories[0]],
        name=name,
    ))

# Pick a color palette and give a color to each kind of category
colors = px.colors.qualitative.D3
colormap = { kind: colors[i] for i, kind in enumerate(set(kinds)) }

fig.add_trace(go.Barpolar(
    theta=categories,
    r=len(categories)*[max(x for v in ratings.values() for x in v)],
    marker_color=list(map(lambda kind: colormap[kind], kinds)),
    opacity=0.6,
    name='Kind'
))

fig.update_polars(bargap=0)

fig.show()

Другие вопросы по теме