Navegar por gráficos por escalas de tiempo

En los gráficos, podría ser interesante recorrerlos por escalas de tiempo en el espíritu de este modelo


Botones izquierdo y derecho para desplazarse por los datos.
Esto también podría resolver el acceso a los datos de más de un año como se mencionó aquí:

Me encanta esta idea. Es lo más « lógico » en mi situación, donde uso gráficos para seguir mi consumo eléctrico. Esto permitiría pasar de un día al anterior/siguiente fácilmente (especialmente en móvil).

No tengo más votos, pero ¡apoyo!

¡Limpio! Totalmente :slight_smile:

Por otro lado, el diseño hay que revisarlo ^^

Me gusta lo que hace HelloWatt:

Pero no tenemos exactamente el mismo caso de uso, así que hay que adaptarlo, pero podría funcionar así

Boceto rápido:

Sabiendo que si el usuario pulsa la flecha de la izquierda, hay que cambiar « Últimas 24 horas » por « 15/01 08:43 - 16/01 8:43 » creo

@pierre-gilles Tengo un poco de tiempo a partir de mañana, y me gustaría explorar esta solicitud de funcionalidad para afinar el requisito. Tengo dos preguntas antes de empezar:

  • ¿Qué falta concretamente en el « boceto rápido » que propusiste el 17 de febrero? Tengo algunas ideas, pero también me gustaría que me digas, con tu mirada de desarrollador, qué necesitas aclarar con un boceto mejorado…
  • Se trata de hacer cambios alrededor de los gráficos, pero no domino lo que el componente que dibuja los gráficos (he olvidado su nombre) permite hacer o no. En particular, ¿todo lo que proponga en el boceto debe estar fuera de la zona dibujada para el gráfico, o puede colocarse dentro del gráfico (por ejemplo, una flecha a la derecha y otra a la izquierda de los números mínimo y máximo del eje de las abscisas)?

¡Genial :smiley:

Hay que pensar en todas las interacciones :slight_smile: Por ejemplo: En mi prototipo rápido, se muestra « últimas 24 horas ». ¿Y si quiero cambiar a « último mes », cómo lo hago?

De hecho, no debe haber ninguna duda, la única diferencia entre el prototipo y el desarrollo final es que el desarrollo final está en Gladys :smiley:

ApexCharts !

Hay que explorar la documentación de ApexChart y solo hacer propuestas posibles :slight_smile:

¡Hola!
Entonces, he estado pensando en esta solicitud de evolución. Hago una propuesta gráfica a continuación para mostrar cómo se colocarán los nuevos elementos que permiten la navegación en el tiempo. Y sobre todo, en un segundo mensaje, añado una lista de reglas a implementar para que la navegación sea lo más 'lógica’ posible.

Las novedades añadidas:

  • añadir una línea con dos flechas de navegación izquierda y derecha, y en el centro la etiqueta del período activo (es la propuesta de @pierre-gilles más arriba…)
  • añadir un elemento para volver a « ahora »
  • añadir un elemento para cambiar de ‹ regular › a ‹ deslizante › (lo explico justo abajo…)
  • en la lista de selección de período, ‹ 30 días › se convierte en ‹ 1 mes ›
  • en la lista de selección de período, eliminar las palabras « último/última/… »

La casilla de verificación es una propuesta, porque creo que la navegación, por ejemplo en el período de ‹ 7 días ›, debería tener dos modos posibles:

  • si, por ejemplo, es jueves 3/4 a las 18:25, puedo querer navegar por períodos de 7 días que terminen todos los jueves a las 18:25. Esto es lo que llamo el modo ‹ deslizante ›.
  • o se puede preferir navegar por períodos de 7 días que vayan todos desde el lunes a las 00:00 hasta el domingo a las 24:00. Esto es lo que llamo el modo ‹ regular ›.

=> Y propongo, por lo tanto, añadir la posibilidad de cambiar de un modo a otro.

Nota 1: Los elementos se colocan todos encima del gráfico, por lo que creo que es independiente de lo que Apexcharts pueda hacer o no…
Nota 2: Para volver a ahora y para el cambio ‹ regular/deslizante ›, no he hecho una elección visual: botón, texto clicable, icono, casilla de verificación, lista desplegable,… Me digo que el desarrollador sabrá hacer la buena elección en función del espacio disponible…

Visualmente, podría quedar así:

Las reglas (en negrita a continuación) son bastante pocas, creo, para que el código a implementar no sea una máquina de vapor. Pero doy muchas precisiones y ejemplos, para que cada uno pueda hacerse una idea y detectar comportamientos que no serían pertinentes. ¡Estoy abierto a sus comentarios para afinar!

====== Navegación con las flechas : ======

  • Cuando se hace clic en la flecha izquierda, el período mostrado se desplaza un período hacia el pasado (la nueva fecha de fin es la antigua fecha de inicio)
  • Cuando se hace clic en la flecha derecha, el período mostrado se desplaza un período hacia el futuro (la nueva fecha de inicio es la antigua fecha de fin)

Nota: Dos acciones sucesivas de flecha izquierda y luego flecha derecha (o al revés) son ‹ simétricas ›; esto devuelve el eje de las abscisas exactamente al mismo período

Caso particular: Si la fecha de fin es >= ahora, la flecha de navegación derecha se desactiva (para no ir a explorar el futuro que aún no tiene datos)

====== Cambio de modo ‹ regular/deslizante ›: ======

En modo regular, los períodos se definen de la siguiente manera:

  • 1h: el período es una hora completa, por ejemplo de 8h a 9h
  • 12h: el período es media jornada completa, es decir de 0h a 12h o de 12h a 24h
  • 24h: el período es un día completo, de 0h a 24h
  • 7 días: el período es una semana completa, de lunes 0h a domingo 24h
  • 1 mes: el período es un mes completo, por ejemplo del 1/1 0h al 31/1 24h, o del 1/2 0h al 28/2 24h.
  • 3 meses: el período es un trimestre calendario completo, por ejemplo del 1/4 0h al 30/6 24h
  • 1 año: el período es un año completo, del 1/1 0h al 31/12 24h

Cuando se pasa al modo ‹ regular ›: el nuevo período incluye la fecha de fin anterior (por lo tanto, se desplaza un poco hacia el futuro)

  • Ej1 para un período de ‹ 1 día ›: la visualización de « 2/4 18h25 a 3/4 18h25 » se convierte en « 3/4 0h a 3/4 24h »
  • Ej2 para un período de 7 días: la visualización de « 27/3 18h25 a 3/4 18h25 » se convierte en « 31/3 0h a 6/4 24h » (= de lunes a domingo incluyendo el 3/4)

Cuando se pasa al modo ‹ deslizante ›: el nuevo período « se alinea » con el día y la hora actuales (por lo tanto, se desplaza un poco hacia el pasado)
Precisión: la nueva fecha de fin será la más reciente posible, sin superar la fecha de fin anterior

nota: el alineamiento con el día y la hora actuales permite volver a ‹ ahora › cuando se navegue con la flecha derecha…

El alineamiento del final del período se hace de la siguiente manera, según el tipo de período (tomando como ejemplo que la fecha actual es jueves 3 de abril 18h25):

  • 1h: el final del período se alineará en xh25
  • 12h: el final del período se alineará en 18h25
  • 24h: el final del período se alineará en 18h25
  • 7 días: el final del período se alineará en jueves 18h25
  • 1 mes: el final del período se alineará en 3/x 18h25
  • 3 meses: el final del período se alineará en 3/x 18h25, pero con x desplazado por un múltiplo de 3 con el mes actual (por lo tanto enero, abril, julio o septiembre en mi ejemplo)
  • 1 año: el final del período se alineará en 3/4 18h25

Ejemplos:

  • Ej1 para un período de ‹ 1 día ›: la visualización de « 3/4 0h a 3/4 24h » se convierte en « 2/4 18h25 a 3/4 18h25 »
  • Ej2 para un período de 7 días: la visualización de « 31/3 0h a 6/4 24h » se convierte en « 27/3 18h25 a 3/4 18h25 » (para terminar un jueves)
  • Ej3 para un período de 1 mes: la visualización de « 1/4 0h a 30/4 24h » se convierte en « 3/3 18h25 a 3/4 18h25 » (para terminar un 3 del mes)

====== Cambio de tipo de período: ======

Cuando se cambia el período para ampliarlo:

  • en modo ‹ deslizante ›, la fecha de fin no se modifica
  • en modo ‹ regular ›, el nuevo período incluye la fecha de fin anterior

Nota: en general el nuevo período más amplio incluye completamente el período anterior, excepto a veces cuando se parte de un período de ‹ 7 días ›

  • Ej1: si se muestra un período de ‹ 1 día › que es un miércoles, el período de ‹ 7 días › irá del lunes al domingo incluyendo ese miércoles
  • Ej2: si se muestra un período de ‹ 7 días › que va de lunes 17/2 a domingo 23/2, el paso a período de ‹ 1 mes › irá del 1/2 al 28/2 (incluyendo por lo tanto el domingo 23/2)
  • Ej3 (menos intuitivo): si se muestra un período de ‹ 7 días › que va de lunes 24/2 a domingo 2/3, el paso a período de ‹ 1 mes › irá del 1/3 al 31/3 (incluyendo por lo tanto el domingo 2/3)

Cuando se cambia el período para reducirlo:

  • en modo ‹ deslizante ›, la fecha de fin no se modifica
  • en modo ‹ regular ›, el nuevo período incluye la fecha de fin anterior.

Caso particular: si este cambio sitúa el nuevo período completamente en el futuro, entonces el nuevo período será en realidad el que incluye ‹ ahora ›.

Nota: en general el nuevo período más reducido está completamente incluido en el período anterior, excepto a veces cuando se va hacia un período de ‹ 7 días ›

  • Ej1: si se muestra un período de ‹ 7 días › que va de lunes a domingo, completamente pasado, entonces el paso a período de ‹ 1 día › mostrará el domingo.
  • Ej2: si se muestra un período de ‹ 7 días › que va de lunes a domingo, pero hoy es el miércoles de esa semana, entonces el paso a período de ‹ 1 día › mostrará el miércoles
  • Ej3: si se muestra un período de ‹ 1 mes › que va de sábado 1/2 a viernes 28/2, el paso a período de ‹ 7 días › irá de lunes 24/2 a domingo 2/3 (incluyendo por lo tanto el viernes 28/2)

Un pequeño defecto con la navegación en ‹ zigzag › en al menos 2 casos:

  • En modo ‹ regular ›, si se parte de una fecha bastante antigua y se encadenan los cambios de período ‹ 7 días ›-‹ 1 mes ›, se irá desplazando progresivamente hacia el futuro porque los meses no siempre terminan en domingo :wink: Por ejemplo: 6-12/1 => 1-31/1 => 27/1-2/2 => 1-28/2 => 24/2-2/3 => 1-31/3 … Pero el caso es raro, y se acabará ‹ topando › con un domingo de fin de mes o con ‹ ahora ›, por lo que no me parece muy grave…
  • Igual si se alterna ‹ 7 días ›-‹ 1 año ›. Pero es aún más raro…

¡Hola @StephaneB :slight_smile: Gracias por ocuparte de este tema!

Hay buenas ideas en tu propuesta, pero creo que la interfaz de usuario (UI/UX) aún necesita un poco de trabajo para ser más intuitiva.

Algunas observaciones:

  • El botón «RàZ» me parece un poco visualmente abultado. ¿Quizás podemos encontrar una alternativa más discreta?
  • Para el botón «regular», la intención no está muy clara. En su estado actual, sin tu explicación al lado, no se entiende en absoluto para qué sirve. La interfaz debe bastarse por sí misma; aquí, sin tus párrafos de texto, no sé qué hace. ¡Incluso hay que ver si realmente es algo que queremos!

En este tipo de interfaz, que ya existe en muchas aplicaciones, creo que realmente podemos inspirarnos en lo que se hace en otros lugares. No hay necesidad de reinventar la rueda :slight_smile: ¿Te basaste en ejemplos concretos existentes?

Gracias por abordar este tema, mis comentarios son francos, pero nada personal ¡aja!

¡No hay problema, me parece bien :wink:

Yo lo querría :wink: Pero eso no es suficiente para convertirlo en una necesidad de la comunidad, eso es seguro. Me interesaría conocer las opiniones de los demás, en particular de quienes votaron por este tema…

Lo entiendo… Bueno, no soy diseñador gráfico, pero acabo de intentar crear iconos para hacerlo más intuitivo. Si hay diseñadores gráficos en la comunidad, no duden en proponer otra cosa :wink:

Para aclarar el impacto del cambio regular/deslizante, podría ser esto:
image y image

Y para el retorno a ‹ ahora ›, podría ser un icono de este estilo:
image

Integración en un gráfico, quedaría así:

¿Qué opinan?

Como decía en mi mensaje anterior, creo que deberíamos inspirarnos en interfaces existentes :slight_smile:

Antes de hacer nuevas propuestas, ¿podrías hacer un pequeño estudio de otras interfaces donde se encuentre este tipo de patrón?

Ejemplo con una herramienta que uso a diario, Stripe:

Pero bueno, no… :wink:

El ejemplo del panel de control de Stripe no me parece pertinente: funciona con una especie de barra de configuración que abre diferentes ventanas grandes para definir el período observado y el período con el que hacer la comparación, y lo que se configura luego se aplica a todos los gráficos de la página. No es en absoluto la lógica de Gladys, y hacer que el método de configuración de Stripe sea ‹ limpio › en cada uno de los gráficos de un panel de Gladys no me parece en absoluto pertinente.
Y por otro lado, Stripe no ofrece una forma sencilla de navegar por el pasado/futuro: no hay flechas de anterior/siguiente para moverse en el tiempo, cuando ese es el objetivo de esta solicitud en el boceto inicial de @Tolkyen y también en el tuyo…

Para resumir, la interfaz de Stripe no me inspira en absoluto para hacer evolucionar Gladys…

¿Tienes otras ideas de interfaces existentes? Porque yo no tengo ideas por mi parte, y no tengo tiempo de explorar ‹ al azar ›… Si me das otras pistas, estaré encantado de mirar :wink:

Todas las opciones expuestas me convienen, gracias @StephaneB por todo el trabajo

También acabo de ver la interfaz propuesta en HelloWatt, que ya habías mencionado. Es limpia e intuitiva, pero mucho más simplificada en comparación con lo que queremos hacer en Gladys. En su caso:

  • la visualización es sistemática en modo ‹ regular ›: un día completo, un mes completo o un año completo
  • Como no hay un tipo de período intermedio (12h, 7 días, 3 meses), las transiciones entre tipos de períodos son más básicas. Siempre es el primer día del período el que se mantiene: 2024 <=> enero 2024 <=> 1 de enero de 2024.
  • no es necesario tener un medio sencillo de volver a ‹ hoy ›, ya que hoy nunca se muestra (se recuperan, como mucho, los datos de ayer…)

Por lo tanto, es difícil mantener su interfaz simple para ofrecer la funcionalidad más rica de Gladys.

Me quedo disponible para estudiar otras interfaces existentes que hagan este tipo de recorrido en el tiempo en gráficos, para intentar inspirarme… ¿Alguien tendría ideas?

hola @StephaneB
no tengo ideas de diseño por el momento, pero ¿no podríamos implementar ya algunas funciones ya presentes en Apexcharts?

No sé muy bien cómo responderte, @mutmut, quizá sea mejor que @pierre-gilles reaccione en función de lo que conoce de ApexCharts. Al no ser desarrollador, no he profundizado en la documentación de ApexCharts para saber qué es posible.

Y es un poco intencional: creo que para hacer un buen trabajo en software, hay que separar a priori la reflexión sobre la necesidad (lo que he intentado hacer) y la de la implementación (que dejo a los desarrolladores). Y, por supuesto, si la necesidad descrita no es técnicamente realizable de manera razonable, hay que intercambiar ideas para encontrar el mejor compromiso :wink:

Pero, en cuanto a este tema, sigo disponible para explorar otras interfaces si tenéis ideas y inspirarme para revisar la necesidad que he dibujado, o para discutir con el/los desarrolladores si algunos puntos que he propuesto son demasiado complejos de realizar.

El objetivo no es copiar exactamente lo que hacen Stripe, HelloWatt u otros productos, sino más bien inspirarse en ciertas mecánicas de interfaz de usuario probadas, que funcionan bien.

Por ejemplo, en Stripe, me gusta su selector de intervalo: combina rangos fijos con intervalos deslizantes:

Me parece que su enfoque es más claro que tu propuesta.

Pero estoy de acuerdo en que el selector de Stripe no tiene sentido para Gladys, es solo un ejemplo.

Puedo pasar tiempo en esta especificación, pero entonces me ayuda menos :stuck_out_tongue:

De mi lado, toda mi energía está en Matter en este momento.

¡Totalmente de acuerdo! :slight_smile:

La implementación es un detalle. Lo más difícil es hacer la especificación.

Gracias @pierre-gilles por estas precisiones

Vale, lo entiendo. Pero eso significa que estás de acuerdo si hago un boceto que se atreve a integrar funcionalidades bastante diferentes a las actuales. Porque hasta ahora hacía propuestas para que fueran funcionales, pero sin tener que cambiar demasiado la interfaz (a la vez para limitar el desarrollo gráfico y para no introducir demasiada ‹ ruptura › en los hábitos de los usuarios)…

No, no era la idea, quiero seguir trabajando en ello. Solo pedía pistas para explorar, pero no solo a ti :wink: Voy a explorar un poco por mi cuenta, pero sigo abierto a las ideas de todos para sitios que muestren gráficos ‹ navegables › y que podrían inspirarme…

Propón lo que quieras :wink:

Sé que es un poco restrictivo, pero justo ahí está todo el desafío del trabajo de especificación :grinning_face_with_smiling_eyes: ¡No es broma cuando digo que es la etapa más compleja!

Hay que investigar: buscar en Google, inspirarse en productos cotidianos, hacerle preguntas a la IA si es necesario, o explorar sitios que agrupan patrones de UX o ejemplos de diseño inspiradores.

Bueno, debo admitir que es un caso de uso en el que la IA realmente ahorra tiempo: describí lo que quería hacer y le pedí ejemplos de sitios y componentes… ¡y me ayudó mucho!

De esto he aprendido varias cosas:

  • poder alternar entre ‹ deslizante › y ‹ calendario › es una necesidad clásica, pero no tener un botón para provocar este cambio. De hecho, es desde el inicio del análisis de los datos que sabemos si queremos estar en un modo u otro. Por lo tanto, basta con poder elegir entre « los últimos 7 días » y « esta semana » para colocarse respectivamente en el modo deslizante o calendario. Y luego los botones anterior/siguiente respetarán esta elección inicial
  • poder volver a « hoy » es necesario, pero el botón dedicado es innecesario. Si hemos retrocedido en el tiempo, basta con poder elegir de nuevo « los últimos 7 días » o « esta semana » para volver a hoy

Por lo tanto, basta con colocar:

  • los dos botones anterior/siguiente
  • la visualización del período mostrado, que despliega un selector de período cuando se hace clic en él
  • y prever en este selector:
    • períodos predefinidos para proponer tanto períodos deslizantes como períodos calendarios
    • la posibilidad de elegir fechas Y horas

Y para una navegación fluida y lógica, se necesita una sincronización automática entre el gráfico y el selector. Es decir:

  • es evidente cuando se hace una elección de período en el selector, luego se cierra validando: el gráfico debe entonces reflejar este nuevo período
  • el otro sentido no siempre es cierto en los ejemplos que he visto, pero creo que es mejor: cuando el gráfico muestra un cierto período (después de navegar con las flechas…) y se abre el selector, este debe mostrar las informaciones correspondientes a este período

He hecho bastantes pruebas de configuración con un componente que me parece interesante, y del cual la IA me dice que será bien compatible con Gladys: DateRangePicker. Pero la compatibilidad, por supuesto, debe ser confirmada por @pierre-gilles u otros desarrolladores :wink:

Con este componente DateRangePicker, he elegido las siguientes opciones para crear el boceto de abajo:

  • opens : center
  • drops : down
  • showDropDowns : true
  • timePicker : true
  • timePicker24Hour : true
  • timePickerIncrement : 5 (minutos)
  • linkedCalendars : false
  • alwaysShowCalendars : true

Y he predefinido los períodos deslizantes que existen actualmente en Gladys, seguidos de los calendarios periódicos equivalentes
- 60 últimas minutos / esta hora
- 12 últimas horas / esta media jornada
- 24 últimas horas / este día
- 3 últimos días / (sin equivalente calendario)
- 7 últimos días / esta semana
- 30 últimos días / este mes
- 90 últimos días / este trimestre
- 365 últimos días / este año

(Si es necesario, podré proporcionar el código de configuración del DateRangePicker que he utilizado)