#python #vega #altair
#python #vega #altair
Вопрос:
Я пытаюсь установить пользовательские точки останова цвета в choropleth, но масштаб, похоже, не соответствует моему искаженному размещению цветов. Например:
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
создает:
Обратите внимание, что оранжевый цвет не центрирован на 0. Как заставить цвет шкалы соответствовать точкам останова моего домена?
Ответ №1:
Вам нужно будет установить тип шкалы на "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)
)
Линейный тип шкалы будет использоваться по умолчанию для кусочных цветовых шкал в будущей версии; более подробная информация на https://github.com/vega/vega-lite/issues/3980
Комментарии:
1. Ты мой герой. Спасибо!