Altair устанавливает постоянный цвет метки для гистограммы - PullRequest
0 голосов
/ 03 января 2019

Пример настройки меток для гистограммы в Altair представлен на официальном сайте здесь: https://altair -viz.github.io / gallery / bar_chart_with_labels.html

Однако,как только вы захотите установить параметр «color» в столбчатой ​​диаграмме, привязанной к переменной, цвета меток автоматически будут соответствовать цвету столбца, как показано ниже.Тем не менее, я намерен иметь постоянный цвет этикетки, как черный все время.Это особенно желательно для гистограмм с накоплением, если вы хотите показывать метку в процентах.Кажется, что установка "color = 'black'" в mark_text здесь не работает;вероятно, потому что он основан на столбцах, которые используют параметр «цвет» как «год».Но я не смог найти интуитивно понятный способ развязки этого параметра.

import altair as alt
from vega_datasets import data

source = data.wheat()

bars = alt.Chart(source).mark_bar().encode(
    x='wheat:Q',
    y="year:O",
    color='year:O'

)

text = bars.mark_text(
    align='left',
    baseline='middle',
        color='black',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='wheat:Q'

)

(bars + text).properties(height=900)

Гистограмма с переменными цветами меток

Пример гистограммы с накоплением с цветными метками

1 Ответ

0 голосов
/ 04 января 2019

Когда вы делаете bars.mark_text(), результирующая диаграмма наследует все, что вы указали в столбчатой ​​диаграмме, включая цветовую кодировку. Чтобы избежать цветовой кодировки текста, лучше всего убедиться, что он не наследует цветовую кодировку.

Например:

import altair as alt
from vega_datasets import data

source = data.wheat()

base = alt.Chart(source).encode(
    x='wheat:Q',
    y="year:O"
)

bars = base.mark_bar().encode(
    color='year:O'
)

text = base.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='wheat:Q'
)

(bars + text).properties(height=900)

Причина, по которой mark_text(color='black') не переопределяет кодировку в вашем фрагменте, заключается в том, что цветовая кодировка имеет приоритет над свойствами меток, как описано в Глобальная конфигурация, локальная конфигурация и кодировка .

...