¿Hay alguna posibilidad de limitar el número de etiquetas enteras de d3.svg.axis que se muestran en el gráfico? Tomemos por ejemplo este gráfico. Solo hay 5 tamaños aquí: [0, 1, 2, 3, 4]
. Sin embargo, los tics también se muestran para .5, 1.5, 2.5
y 3.5
.Cómo limitar d3.svg.axis a las etiquetas de enteros?
Respuesta
Usted debe ser capaz de utilizar d3.format
en lugar de escribir su propio función de formato para esto.
d3.svg.axis()
.tickFormat(d3.format("d"));
También puede utilizar tickFormat
en su escala de la que el eje utilizará automáticamente de forma predeterminada.
me he dado cuenta de que es suficiente para ocultar estos valores, en lugar de excluir por completo. Esto se puede hacer mediante el tickFormat
(https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format) tales como:
d3.svg.axis()
.tickFormat(function(e){
if(Math.floor(e) != e)
{
return;
}
return e;
});
El uso de d3.format("d")
como tickFormat podría no funcionar en todos los escenarios (see this bug). En los dispositivos Windows Phone (y probablemente en otros), los cálculos imprecisos pueden dar lugar a situaciones en las que los tics no se detectan correctamente como números enteros, i. mi. un tilde de "3" puede almacenarse internamente como 2.9999999999997 que para d3.format("d")
no es un número entero.
Como resultado, el eje no se muestra en absoluto. Este comportamiento especialmente se vuelve aparente en rangos de ticks hasta 10.
Una posible solución es tolerar el error de máquina especificando un valor épsilon. Los valores no tienen que ser números enteros exactos de esta manera, pero pueden diferir de la siguiente entero hasta el rango de epsilon (que debe ser la forma más baja que su error de datos):
var epsilon = Math.pow(10,-7);
var axis = d3.svg.axis().tickFormat(function(d) {
if (((d - Math.floor(d)) > epsilon) && ((Math.ceil(d) -d) > epsilon))
return;
return d;
}
Otra solución, que también se menciona en otros hilos, es especificar un conteo de ticks fijo y luego redondear los ticks (que ahora debería ser "casi" entero) al entero más cercano. Necesita saber el valor máximo de sus datos para que esto funcione:
var axis = d3.svg.axis().ticks(dataMax).tickFormat(d3.format(".0f"))
- 1. Agregar etiquetas al diagrama de acordes D3
- 2. d3.js fuerza colapsable con etiquetas
- 3. Ocultar etiquetas de tilde en D3 en gráfico de línea
- 4. Limitar longitudes de campo de tipo de datos enteros
- 5. Multinivel/Agrupamiento de etiquetas de eje con d3
- 6. Cómo convertir a formato JSON de D3?
- 7. Cómo evitar las etiquetas de las entradas
- 8. Spring JdbcTemplate: ¿cómo limitar las filas seleccionadas?
- 9. etiquetado de eje d3
- 10. ¿Cómo agregar atributos a las etiquetas de opción en django?
- 11. D3: cómo lidiar con las estructuras de datos JSON?
- 12. etiquetas html en las etiquetas de opción
- 13. ¿Cómo enumerar todas las etiquetas de Git?
- 14. cómo crear etiquetas para los datos en el gráfico de donaciones utilizando d3.js
- 15. Cómo leer las etiquetas de archivos MP3
- 16. TagIT: limitar la creación de etiquetas a la lista dada por el Ajax
- 17. ¿Cómo funciona d3.scale.quantile?
- 18. ¿Cómo limitar las instancias simultáneas del mismo script de Ruby?
- 19. ¿Cómo reacciono a las nuevas etiquetas en git hooks?
- 20. ¿Cómo conservo las etiquetas de marcado?
- 21. MSTest - Cómo limitar las carpetas de resultados de prueba
- 22. Cómo quitar las etiquetas, excepto las etiquetas de contenedores formato electrónico
- 23. cómo limitar bucle foreach a tres bucles
- 24. django: ¿Cómo limitar las opciones de campo en formset?
- 25. Notepad ++: texto encapsulado en las etiquetas
- 26. ¿Cómo encontrar todas las etiquetas de cada página y luego incluir las etiquetas en una columna?
- 27. Cómo cambiar el orden de las etiquetas de las facetas en ggplot (personalizadas etiquetas envolventes faceta)
- 28. d3.js Tamaño de la nube de etiquetas de un Json/array?
- 29. ¿Cómo limitar las columnas devueltas por la consulta de Django?
- 30. Java: limitar a clases de jerarquía?
Útil. ¿Hay alguna manera de que deje caer las marcas también? El formato oculta los medios números, pero mantiene la mitad de las marcas. – IBBoard
@IBBoard prueba algo como esto: 'axis.ticks (tickCountSetter (yMax))' donde yMax es un número, usando esta función: 'función tickCountSetter (n) {if (n <= 2) {return n} else {return 10}} ' – s2t2