Диапазон цветовой гаммы Altair смещен - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь установить пользовательские цветовые точки прерывания на хороплете, но шкала, по-видимому, не соответствует моему искаженному расположению цветов.Например:

counties = alt.topo_feature(vega_data.us_10m.url, 'counties')

states = alt.topo_feature(vega_data.us_10m.url, 'states')

outlines = alt.Chart(states).mark_geoshape(
    stroke='black'
).project('albersUsa')

domain = [df.min()['rep_vote_change'], 0, df.max()['rep_vote_change']]
range_ = ['darkred', 'orange', 'green']
colors = alt.Chart(counties).mark_geoshape().encode(
    color=alt.Color('rep_vote_change:Q', scale=alt.Scale(domain=domain, range=range_))
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(df, 'id', ['rep_vote_change'])
).project(
    type='albersUsa'
).properties(
    width=500,
    height=300
)

colors + outlines 

производит:

enter image description here

Обратите внимание, что апельсин не центрирован на 0. Как заставитьмасштабировать цвет в соответствии с точками останова моего домена?

1 Ответ

2 голосов
/ 19 марта 2019

Вам нужно будет установить тип шкалы на "linear", чтобы он работал так, как вы ожидаете. Например (используя более простую диаграмму, потому что вы не предоставили свои данные):

import altair as alt
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'x': np.random.randn(100),
    'y': np.random.randn(100),
    'c': np.random.choice([-10, 0, 1], 100)
})

scale = alt.Scale(
    domain=[-10, 0, 1],
    range=['darkred', 'orange', 'green'],
    type='linear'
)

alt.Chart(df).mark_point().encode(
  x='x',
  y='y',
  color=alt.Color('c', scale=scale)
)

enter image description here

Тип линейной шкалы будет использоваться по умолчанию для кусочных цветовых шкал в будущем выпуске; подробнее на https://github.com/vega/vega-lite/issues/3980

...