Я пытаюсь создать тему Альтаира, которая соответствует нашим внутренним принципам. Я нашел эту превосходную статью, которая решила большинство моих проблем. Однако ни статья, ни поиск документации не решили проблему выравнивания названия диаграммы с левой стороной чисел на оси у. См. пунктирную линию в теме Городского института для наглядного объяснения. Проблема в том, что я не знаю ширину самого длинного числа по оси Y. Решения, которые я нашел, просто жестко закодировали смещение ожидаемой ширины числа. Тем не менее, я должен сделать тему, которая автоматически соответствует стандарту во всех случаях. Подсказки к возможным решениям приветствуются. Я опробую их и опубликую результаты.

1
timthoe 13 Фев 2020 в 12:37

2 ответа

Лучший ответ

Доступные настройки выравнивания заголовков для Altair / Vega-Lite перечислены здесь: https : //vega.github.io/vega-lite/docs/title.html#params

Самое близкое к тому, что вы хотите, это установить anchor='start' в конфигурации заголовка:

import altair as alt
from vega_datasets import data
cars = data.cars()

alt.Chart(cars).mark_bar().encode(
  x=alt.X('Miles_per_Gallon', bin=True),
  y='count()',
).properties(
    title='A bar chart'
).configure_title(
    anchor='start'
)

enter image description here

К сожалению, в схеме Vega-Lite нет более точного способа управления выравниванием, чем это. Если это важно для вашего использования Altair / Vega-Lite, я бы предложил открыть Запрос функции Vega-Lite.

1
jakevdp 13 Фев 2020 в 17:24

Я не уверен, что это именно то, что вы ищете, так как вы упомянули, что хотите создать тему, но вы можете воссоздать внешний вид темы пользовательского интерфейса, добавив текст на диаграмму с помощью mark_text ().

Вот пример:

df = pd.DataFrame({'col1':[0,1,2,3,4,5], 'col2':[0,1,2,3,4,5]})
text_df = pd.DataFrame({'col1':[0], 'col2':[0], 'col3':['title']})

line = alt.Chart(df).mark_line().encode(x='col1', y='col2')
text = alt.Chart(text_df.query('col1 == 0')).mark_text(dx=-60, dy=-400, fontSize=24, font='Lato').encode(x='col1', y='col2', text='col3')
line + text

Вот итоговая диаграмма:

enter image description here

1
Hassen Morad 17 Фев 2020 в 01:37