Изменить цвет одной линии на линейном графике Альтаира на основе другого столбца индикатораPython

Программы на Python
Ответить
Anonymous
 Изменить цвет одной линии на линейном графике Альтаира на основе другого столбца индикатора

Сообщение Anonymous »

Представьте, что у вас есть следующий кадр данных Polars «df», который содержит температуру «активного» или «неактивного» устройства:

Код: Выделить всё

import polars as pl
from datetime import datetime

df_content = {'timestamp': [datetime(2025, 10, 31, 23, 0), datetime(2025, 10, 31, 23, 1), datetime(2025, 10, 31, 23, 2), datetime(2025, 10, 31, 23, 3), datetime(2025, 10, 31, 23, 4), datetime(2025, 10, 31, 23, 5), datetime(2025, 10, 31, 23, 6), datetime(2025, 10, 31, 23, 7), datetime(2025, 10, 31, 23, 8), datetime(2025, 10, 31, 23, 9), datetime(2025, 10, 31, 23, 10), datetime(2025, 10, 31, 23, 11), datetime(2025, 10, 31, 23, 12), datetime(2025, 10, 31, 23, 13), datetime(2025, 10, 31, 23, 14), datetime(2025, 10, 31, 23, 15), datetime(2025, 10, 31, 23, 16), datetime(2025, 10, 31, 23, 17), datetime(2025, 10, 31, 23, 18), datetime(2025, 10, 31, 23, 19)],
'temperature': [61.3, 61.39, 60.86, 61.95, 60.72, 60.72, 61.15, 59.97, 60.39, 60.46, 61.88, 61.04, 60.67, 60.31, 60.64, 60.64, 60.99, 61.49, 61.13, 60.2],
'indicator': ['inactive', 'inactive', 'inactive', 'active', 'active', 'active', 'active', 'active', 'inactive', 'inactive', 'inactive', 'inactive', 'inactive', 'active', 'active', 'active', 'active', 'active', 'inactive', 'inactive']}

df = pl.DataFrame(df_content)
df



временная метка
температура
индикатор




31 октября 2025 23:00:00
61.3
inactive


2025-10-31 23:01:00
61.39
неактивно


2025-10-31 23:02:00
60,86
неактивно


31 октября 2025 23:03:00
61,95
active


2025-10-31 23:04:00
60,72
active


2025-10-31 23:05:00
60.72
active


2025-10-31 23:06:00
61.15
active


2025-10-31 23:07:00
59,97
активно


2025-10-31 23:08:00
60.39
неактивно


31 октября 2025 23:09:00
60,46
inactive


2025-10-31 23:10:00
61,88
неактивно


2025-10-31 23:11:00
61.04
inactive


2025-10-31 23:12:00
60.67
inactive


2025-10-31 23:13:00
60.31
active


2025-10-31 23:14:00
60.64
активен


2025-10-31 23:15:00
60,64
active


31 октября 2025 23:16:00
60,99
active


2025-10-31 23:17:00
61,49
активный


2025-10-31 23:18:00
61.13
неактивный


2025-10-31 23:19:00
60.2
неактивно



Данные можно отобразить с помощью Altair, используя следующий синтаксис:

Код: Выделить всё

df.plot.line(
x="timestamp",
y=alt.Y("temperature"),
).properties(width=1000)
Мы получаем только одну строку для температуры.
Изображение

Но мне бы хотелось, чтобы эта единственная строка имела два отдельных цвета для разных периодов времени. Например, для промежутка времени с «2025-10-31 23:00:00» до «2025-10-31 23:02:00», когда машина была «неактивна», я бы хотел, чтобы линия была синей (как и для всех других промежутков времени, когда машина была неактивна), а для периода времени с «2025-10-31 23:03:00» до «2025-10-31 23:07:00», где машина была «активна» (а также для всех других промежутков времени, когда машина была активна), цвет должен быть красным.
Добавление аргумента «цвет» в график не помогает. Следующий код позволяет разделить строки вместо одной:

Код: Выделить всё

df.plot.line(
x="timestamp",
y=alt.Y("temperature"),
color="indicator"
).properties(width=1000)
Изображение


Подробнее здесь: https://stackoverflow.com/questions/798 ... tor-column
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»