Estoy tratando de entender por qué la ecuación no da el resultado deseado.
No puedo decodificar cómo esto devuelve 90.96. Incluso usando la ecuación log y = m log x + log k no puedo obtener el mismo resultado. usando ∆log y dividido por ∆log x para obtener m .
const logScale = d3.scaleLog() .domain([1, 1000]) .range([10, 100]); console.log(logScale(500)); // returns 90.96Las escalas logarítmicas tienen la forma y = m log(x) + b. Por defecto es un registro de base 10. con tu escala
const logScale = d3.scaleLog() .domain([1, 1000]) .range([10, 100]);m = 30 y b = 10. Así que puedes pensar en ello como
function logScale(x) { return 30 * Math.log10(x) + 10; }Editar: explicando cómo obtuve b = 10 y m = 30
Por el dominio y el rango, sabemos que logScale(1) === 10 . También sabemos que Math.log10(1) === 0 . Por lo tanto, cuando x es 1 y y es 10, la ecuación y = m * log(x) + b se convierte en 10 = m * 0 + b, por lo que sabemos que b es 10. Ahora podemos sustituir otra (x, y) empareje para obtener m. Por ejemplo, podemos elegir los valores máximos del dominio y el rango: 100 = m * log(1000) + 10. Por lo tanto, m = 90 / log(1000), que es 30.