javascript d3.js scale scatter-plot nvd3.js

javascript - nvd3 Tabla de burbujas con escala de registro



d3.js scale (1)

En lugar de calcular directamente el registro cuando crea su matriz de datos, déjelo como está y luego use una escala de registro para su eje.

Para usar una escala personalizada en NVD3, la pasa como un parámetro a los chart.yScale(scale) o chart.xScale(scale) .

var chart = nv.models.lineChart() .yScale( d3.scale.log() );

Simplemente no intente usar una escala de registro para los valores y en un gráfico de barra o área, ya que esos incluyen automáticamente 0 en el dominio (¡y obtendrá errores si intenta trazar cualquier cosa en el log(0) !)

Un par de advertencias:

  • Las funciones de formateo de garrapatas funcionan de forma diferente en escalas de registro que para otras escalas; es probable que desee dejarlo como predeterminado. Vea los documentos (enlace arriba) para más información.

  • El método .nice() no parece funcionar muy bien en las escalas de registro; cuando estaba jugando en el sitio de código en vivo NVD3, un dominio de [1,99] estaba dando como resultado un valor de tilde final de 98.999999999 en el eje. Es posible que desee comprobar explícitamente que el dominio comienza y termina en números redondos.

También tenga en cuenta que, dado que nunca está tratando con los valores calculados para los registros (solo con las posiciones relativas de la escala), no necesita especificar una base para el logaritmo. Los documentos mencionan un logScale.base(number) pero parece estar obsoleto ...

Estoy usando la dispersión NVD3 / gráfico de burbujas. Esto es una continuación de la pregunta aquí . Estoy trazando los valores de la base de registro 2 para el eje y. Pero quiero que el eje y tenga los valores originales como etiquetas correspondientes a la escala de base de registro 2. No puedo entender cómo hacerlo.

Editar

Esto es lo que tengo para trazar

data[i].values.push({ x: random() , y: log2(yValue) , size: Math.random() }); function log2(val) { console.log("val = " + val + " : " + Math.log(val) / Math.LN2) return Math.log(val) / Math.LN2; }

Ahora, los ticks del eje y tienen los valores log2. Quiero cambiar los tics del eje Y para que se muestren los valores originales y no los valores log2.

Gracias,