Python Altair - фундаментальная путаница с поднабором данных через Transform_Filter - получение неожиданных пустых наборов - PullRequest
0 голосов
/ 24 мая 2019

Ниже приведен код, который я использовал для создания графика. Моя долгосрочная цель - иметь

Гистограмма, где я задаю некоторые параметры. Затем я, основываясь на множественном выборе на гистограмме, создаю прямоугольник 1xN датчиков. Затем я могу щелкнуть любой из этих датчиков, чтобы с течением времени генерировать их значения.

Это для установки умного дома. У меня есть номера. В каждой комнате есть датчики. В конечном итоге у меня будет гистограмма, отображающая информацию об идентификаторах номеров. Я могу выбрать любое подмножество идентификаторов помещений, чтобы создать прямоугольник с выбираемыми блоками идентификаторов датчиков, присутствующих в этой комнате. Затем я могу выбрать любой из этих датчиков, чтобы сгенерировать временной ряд их значений во времени.

Ниже приведена последняя часть. Я упростила свой набор данных, чтобы у меня был только 1 номер комнаты и 1 датчик.

Когда код выполняется, по умолчанию он должен показывать «все» датчики. Хотя мне это не нравится, я считаю, что это предполагаемое поведение.

Моя цель заключается в том, чтобы иметь возможность выбирать датчик и отображать только эту линию датчиков. Я тестирую простой случай с одним датчиком в наборе данных, чтобы убедиться, что все работает. Тем не менее

После того, как я щелкну сенсором и он преобразуется, график станет пустым

Мой код очень похож на рабочий код, который используется для тепловых карт и гистограмм, поэтому я не уверен, что вызывает такое поведение.

Код и картинки ниже.

roomID = '5K3'
senID = 0868

rID = sensor_table['room_id'] == roomID
sID = sensor_table['sens_id'] == senID

sensor_vals = sensor_table[ rID & sID ]

selector = alt.selection_multi()

sensor_vals = sensor_vals[ ['cur_date', 'cur_time', 'discriminator', 'reading', 'sens_id', 'room_id'] ] ## Take only the columns we need. Drop others. Discriminator not used in the simple case, but will be used for updating bargraph once step one is implemented.

rect6= alt.Chart(sensor_vals).mark_rect().encode(
    x=alt.X('sens_id:N', axis=alt.Axis(title='Sensor ID', grid=True)),
    color=alt.condition(selector, 'count()', alt.value('lightgray'))
).add_selection(selector)

c = alt.Chart(sensor_vals).mark_line().encode(
x='cur_time:N',
y='reading:Q',
).transform_filter(selector)


alt.vconcat(
    rect6,
    c
).resolve_legend(
    color='independent',
    size='independent'
).save(outputSensor)

Ниже приведены изображения загрузки графика по умолчанию и загрузки графика после выбора подошвенного датчика из «тепловой карты»

Default view showing

After selecting the sole sensor from the

...