Проблема на оси X графика, время не отображаетсяPython

Программы на Python
Ответить
Anonymous
 Проблема на оси X графика, время не отображается

Сообщение Anonymous »

Я работаю над информационной панелью, используя Shiny для Python и Plotly Express. Я пытаюсь создать диаграмму Ганта (используя px.timeline) для визуализации периодов работы различных котлов (состояния ВКЛ/ВЫКЛ).
Цель: я хочу отобразить горизонтальную гистограмму, где ось X представляет временную шкалу (дата и время), а столбцы представляют интервалы, в течение которых котел был активен («ВКЛ»).
Проблема: ось X на диаграмме неправильно отображает дату и время. Несмотря на то, что я передаю объекты datetime и устанавливаю формат галочки, метки осей кажутся неправильными (или не соответствуют формату).
Мое преобразование данных: я создал вспомогательную функцию create_gantt_data для преобразования моих данных временных рядов (поминутные снимки) в DataFrame интервалов с fecha_inicio (начало) и fecha_fin (конец). Кажется, эта логика работает нормально и возвращает правильные интервалы:

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

def create_gantt_data(df_recorte):
gantt_rows = []

for col in ['estado_caldera1', 'estado_caldera2', 'estado_bomba_calor']:

serie = df_recorte[col]

# 1. Detect state changes
cambios = serie.diff()

# 2. Identify turn-on and turn-off timestamps based on diff
turn_on = serie[cambios == 1.0].index
turn_off = serie[cambios == -1.0].index

# 3. Handle Edge Cases
# If it starts ON (diff misses this because there is no previous value)
if serie.iloc[0] == 1.0:
# Prepend the first timestamp to turn_on
turn_on = serie.index[:1].union(turn_on)

# If it ends ON (it never turned off within the selected range)
if serie.iloc[-1] == 1.0:
# Append the last timestamp to turn_off
turn_off = turn_off.union(serie.index[-1:])

# 4. Create the intervals
# zip() pairs the first ON with the corresponding first OFF, etc.
for start, end in zip(turn_on, turn_off):
gantt_rows.append({
'caldera': col,
'fecha_inicio': start,
'fecha_fin': end
})

return pd.DataFrame(gantt_rows)
Отображает временную диаграмму (стиль Ганта) для визуализации интервалов включения каждого котла.

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

with ui.card(style="margin-top: 20px;"):
ui.tags.h4("Gráfico de Encendido de Calderas")
@render_plotly
def show_calderas():
data = data_for_timeline()
fig = px.timeline(
data_frame=data,
x_start='fecha_inicio',
height=500,
x_end='fecha_fin',
template="simple_white",
y="caldera",
color="caldera",
title="Tiempos de Encendido por Caldera",
labels={
"fecha_inicio": "Inicio de Operación",
"fecha_fin": "Fin de Operación",
"caldera": "Calderas"
}
)

fig.update_layout(
xaxis_title="Fecha y Hora",
yaxis_title="Calderas",
xaxis=dict(tickformat="%d-%m-%Y %H:%M")
)

fig.update_xaxes(
tickangle=60,
nticks=20,
)
return fig
пример CSV. Обратите внимание, что я динамически конвертирую в временные метки:

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

Fecha,Hora,Bomba Calor - Temperatura de Aire (°C),Bomba Calor - Temperatura Entrada (°C),Bomba Calor - Temperatura Salida (°C),Bomba Calor - Estado Caldera 2 (estado),Bomba Calor - Estado Caldera 1 (estado),Bomba Calor - Estado Bomba de Calor (estado)
04-10-25,00:01,22.2,63.4,63.4,0.0,1.0,0.0
04-10-25,00:11,21.9,61.8,61.7,0.0,1.0,1.0
04-10-25,00:21,21.7,60.3,60.3,1.0,1.0,0.0
04-10-25,00:30,22.2,63.4,63.4,1.0,0.0,0.0
04-10-25,00:41,21.9,61.8,61.7,1.0,0.0,1.0
04-10-25,00:51,21.7,60.3,60.3,0.0,1.0,0.0
04-10-25,00:55,22.2,63.4,63.4,0.0,1.0,1.0
04-10-25,01:03,21.9,61.8,61.7,0.0,0.0,1.0
04-10-25,01:10,21.7,60.3,60.3,0.0,0.0,1.0
Изображение


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

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

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

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

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

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