Создать диаграмму с логарифмической осью Y - PullRequest
1 голос
/ 20 августа 2011

Я создал различные графики, используя Arithemtic (постоянный масштаб) по оси Y.Теперь я хочу создать его с логарифмической осью Y.

Например: расстояние между 1 и 2 должно быть таким же, как 2 и 4

Любые идеи по методу масштабирования

Спасибо

Ответы [ 2 ]

1 голос
/ 05 октября 2016

Вы можете использовать Morris.js для рисования диаграмм.

Затем вы можете расширить Morris и изменить функцию transY для логарифмической шкалы, например:

(function () {
    var $, MyMorris;

    MyMorris = window.CbyMorris = {};
    $ = jQuery;

    MyMorris = Object.create(Morris);

    MyMorris.Grid.prototype.gridDefaults["yLogScale"] = false;

    MyMorris.Grid.prototype.transY = function (y) {
        if (!this.options.horizontal) {
            if (this.options.yLogScale) {
                return this.bottom - (this.height * Math.log((y + 1) - this.ymin) / Math.log(this.ymax / (this.ymin + 1)));
            } else {
                return this.bottom - (y - this.ymin) * this.dy;
            }
        } else {
            return this.left + (y - this.ymin) * this.dy;
        }
    };
}).call(this);

Затем установите для параметра yLogScale значение true в вашей конфигурации Morris:

yLogScale: true

Пожалуйста, обратитесь к моему полному ответу, чтобы увидеть результат: https://stackoverflow.com/a/39878478/1351076

1 голос
/ 20 августа 2011

Arithemtic относится к конкретной программе или плагину?В противном случае, если вы просто имеете в виду, что у вас есть список значений x и y, поместите значения y через функцию журнала и постройте график.На каком языке вы программируете?

Редактировать

Эй, извините, мне понадобилось время, чтобы вернуться к вамЭто код, который вы ищете?

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Demo</title>

    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>

        var test = {
            x_values: [0,10,20,30,40,50,60,70,80,90,100],
            y_values: [0,10,20,30,40,50,60,70,80,90,100],
            convert_values_to_log10: function (values) {
                var i=0;
                var converted_values = []
                for (i=0; i<values.length; i++) {
                    converted_values[i] = Math.log(values[i])/Math.LN10
                }
            return converted_values;
            }

        }

        $(document).ready(function(){
          $('#x_vals').text(test.x_values.toString());
          $('#y_vals').text(test.y_values.toString());
          $('#y10_vals').text(test.convert_values_to_log10(test.y_values).toString());
        });

    </script>

  </head>
  <body>

    <h2>x values = </h2>
    <p id="x_vals"></p>
    <h2>y values = </h2>
    <p id="y_vals"></p>
    <h2>log10 y values = </h2>
    <p id="y10_vals"></p>

  </body>
</html>
...