Как обрабатывать категориальные легенды со слишком большим количеством записей, чтобы соответствовать фиксированной высоте диаграммы? - PullRequest
0 голосов
/ 11 октября 2019

Я использую шаблон диаграммы Vega-Lite (используя vega-embed) на панели инструментов, содержащей фильтры для управления различными аспектами отображаемых данных. Диаграмма содержится в виджете определенного размера и использует ""autosize": {"type": "fit", "contains": "padding"} для управления размерами диаграммы.

Одна из диаграмм вызывает у меня некоторые проблемы - гистограмма с накоплением, отображающая некоторые значения во времени, сгруппированные по компаниям. В некоторых случаях слишком много компаний в данных, переносимых на приборную панель, приводят к тому, что легенда отсекается. EG только ~ 25 из 50+ записей легенды, показывающих

Есть ли способ сделать эту легенду более полезной? Я использую всплывающие подсказки, но если отключить легенду (отвергнутую менеджером по продукту), я не знаю, как поступить. Я попытался составить некоторую условную логику, чтобы сделать так, чтобы при различном числе> = 25 тогда "legend": {"columns": 2}, но не было никакой удачи в выполнении этой работы.

У кого-нибудь есть идеи по общему решению, которое будет работать как для экземпляров 25+ легенд, так и для 5? Иметь легенду с возможностью прокрутки было бы идеальным решением, а также ограничение количества записей легенды (оставшихся в ячейке other) также являются жизнеспособными альтернативами, о которых я думал, но не знаю, как это сделать в вегетарианстве. lite.

Заранее спасибо!

PS Я не веб-разработчик, просто аналитик, который взял на себя работу по написанию спецификаций vega-lite, поэтому извиняюсь за отсутствие технических подробностей окак это развернуто!

1 Ответ

0 голосов
/ 11 октября 2019

Вы можете указать количество столбцов в аргументе legend соответствующей кодировки. Например:

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

np.random.seed(4567)

df = pd.DataFrame({
    'x': np.random.randn(100),
    'y': np.random.randn(100),
    'category': np.random.choice(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 100)
})

alt.Chart(df).mark_point().encode(
    x='x',
    y='y',
    color=alt.Color('category', legend=alt.Legend(columns=3))
)

enter image description here

...