Altair-viz повторить и преобразовать - PullRequest
1 голос
/ 07 апреля 2020

Есть ли способ применить преобразование или фильтр данных, используя кодировку, используемую в повторяющейся диаграмме?

Если я правильно понимаю документы , кажется, что это невозможно напрямую:

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

Какие бы хорошие способы обойти это? Например, ниже, скажем, я хочу построить только точки, для которых y>0 (или это может быть другое преобразование, я не хочу просто увеличивать ось у). Есть ли способ применить что-то вроде строки # 0, используя цель повторения (как попытка в # 1, которая завершается неудачей с TypeError: '>' not supported between instances of 'RepeatRef' and 'float')?

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

x = np.arange(100)
source = pd.DataFrame({
  'x': x,
  'f': np.sin(x / 5),
  'g': np.cos(x / 3),    
})

alt.Chart(source).mark_line().encode(
    alt.X('x', type='quantitative'),
    alt.Y(alt.repeat('column'), type='quantitative'),
).transform_filter(
    # alt.datum.f >= 0. #0 Works, but would like to use f or g depending on the plotted variable
    alt.repeat('column') > 0. #1 ERROR HERE
).repeat(
    column=['f', 'g']
)

1 Ответ

2 голосов
/ 07 апреля 2020

Нет способа сослаться на повторяющееся поле внутри преобразования. Лучший способ достичь этого - построить диаграмму с помощью конкатенации; например:

alt.hconcat(*(
  alt.Chart(source).mark_line().encode(
      alt.X('x', type='quantitative'),
      alt.Y(col, type='quantitative'),
  ).transform_filter(
      alt.datum[col] >= 0
  ) 
  for col in ['f', 'g']
))

enter image description here

...