Estoy usando Plotly para mostrar un histograma con una plantilla flotante que muestra el valor del grupo. Necesito mostrar una precisión de 3 dígitos, incluso cuando los datos son grandes, sin embargo, Plotly parece redondear el valor antes de eso, así que con el ejemplo a continuación, hovertempalte salta de "28200.000 - 28500.000" a "28600.00 - 28800.00" y el valor 28589.02 es absorbido por la segunda barra mientras que está por debajo del mínimo del rango.
¿Hay alguna opción para cambiar esa precisión en el valor %{x}? Intenté usar hoverformat: .3f pero solo agrega 0 al final para que no se solucione.
Puede encontrar el ejemplo aquí: https://stackblitz.com/edit/typescript-plotly-hfluqw?file=index.ts
const appDiv: HTMLElement = document.getElementById('app'); appDiv.innerHTML = `<div style="width: 100%; height: 100%" id="chart"></div>`; import { newPlot } from 'plotly.js-dist'; const data = [ { type: 'histogram', marker: { color: 'red' }, mode: 'lines+markers', x: [25000, 28333.952, 28334.08, 28589.02, 28945.89], xbins: { start: 25000, end: 29340.479, size: 394.589, }, hovertemplate: 'value: %{x}', }, ]; const layout = { bargap: 0.1, hovermode: 'closest', xaxis: { hoverformat: ',.3f', }, }; newPlot('chart', data, layout);EDITAR: arreglar el punto dentro de la brecha de rango
Finalmente solucioné la mayor parte de mi problema eliminando los valores de inicio y final de los xbins, dejando la lógica predeterminada de Plotly. Los valores mostrados todavía están redondeados, por lo que hay un salto, pero el rango siempre cubre todos los puntos, por lo que en el ejemplo anterior los rangos se fijaron en "28.1k - 28.4k" y "28.5k - 28.7k". Creo que el principio y el final cambiaron esto y rompieron la lógica de redondeo de Plotly.
Desafortunadamente, parece que actualmente este es el comportamiento esperado, y así es como funciona la "reducción" del rango interno de Plotly.
Hay un problema abierto de Github que hace una pregunta similar y más simple: ¿Cómo es que un tamaño de contenedor de 50 muestra rangos de 0-40 , 50-90 , etc., como se muestra en esta demostración en vivo ?
Un desarrollador explica:
Todo esto está al servicio de una mayor claridad en los bordes de los contenedores. Para ser precisos, lo que está pasando aquí son dos cosas:
- Detectamos que los valores de los datos son todos enteros, por lo que cambiamos los bordes del contenedor 0.5 hacia abajo para garantizar que NO haya valores exactamente en un borde del contenedor. Puede ver esto si hace zoom, los contenedores en realidad van -0.5 -> 49.5, 49.5 -> 99.5, 99.5 -> 149.5, etc.
- Pero enumerar exactamente esos valores en la etiqueta flotante sería confuso: ¿qué hacen los valores semienteros en una etiqueta para datos enteros? Entonces, miramos los datos nuevamente y preguntamos: ¿cuál es el valor más cercano al borde izquierdo o derecho de un contenedor? En este caso, es 0,5 desde el borde izquierdo y 9,5 desde el derecho, y según el ancho del contenedor de 50, siempre podemos representar estos valores con un cero al final, así que eso es lo que hacemos: 0-40, 50-90, 100-140, etc. Si agrega un valor que está un poco más cerca del borde derecho de un contenedor, digamos que cambia uno de los 140 a 141, verá que las etiquetas cambian a 0-49, 50-99, 100- 149, etc., ya que ya no podemos redondear a un dígito mayor.
Lo que realmente NO queremos hacer es tener etiquetas 50-100 y 100-150, porque entonces es ambiguo en qué contenedor ponemos un valor de exactamente 100. Pero quizás podría argumentar que el cambio de contenedor debería coincidir con la reducción del rango: es decir, debido a que cambiamos los intervalos exactamente 0,5 aquí, también debemos reducir los rangos que informamos en exactamente 0,5 en cada lado, a 50-99, o si queremos mantener 50-90, debemos desplazar los intervalos en 5.
Esta explicación también se aplica a su caso: si intenta agregar el valor 28551 , que está exactamente en el borde derecho del octavo contenedor\borde izquierdo del noveno contenedor (porque: 25000 + (394.589 * 9) = 28551.301 ), notará que los bordes del contenedor flotante se vuelven muy precisos, como puede ver aquí .
Así que parece que no hay mucho que hacer al respecto, al menos por ahora.