使用对数Y轴创建图表

时间:2011-08-20 17:59:15

标签: javascript html5 charts logging logarithm

我在Y轴上使用Arithemtic(恒定比例)创建了各种图表。现在我想用对数Y轴创建一个。

例如:1和2之间的距离应与2和4相同

关于缩放方法的任何想法

由于

2 个答案:

答案 0 :(得分:1)

'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>

答案 1 :(得分:1)

您可以使用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);

然后在Morris配置中将yLogScale参数设置为true:

yLogScale: true

请参阅我的完整答案以查看结果:https://stackoverflow.com/a/39878478/1351076