Странная диаграмма максимальная ось х значение (реальный вызов)
Здесь вы можете увидеть диаграмму, созданную с помощью Graphael. http://jsfiddle.net/aNJxf/4/
Это показано с его осью Y правильно.
Первое значение y равно 0,03100, а максимальное значение по оси y равно 0,031. Если мы изменим значение на 0,03104, максимальное значение по оси y станет 1,03, и теперь все наши точки находятся внизу. Если мы добавим еще 0,00001, то есть получим это значение 0,03105, максимум на оси y станет 0,531, и теперь наши точки будут показаны в неправильном положении на графике. Кажется, что-то идет не так, как графель вычисляет максимальное значение оси Y.
Почему это происходит? И как мы можем это исправить?
Код, который я вставил, есть
var r = Raphael("holder"),
txtattr = { font: "12px sans-serif" };
var x = [], y = [], y2 = [], y3 = [];
for (var i = 0; i < 1e6; i++) {
x[i] = i * 10;
y[i] = (y[i - 1] || 0) + (Math.random() * 7) - 3;
}
var demoX = [[1, 2, 3, 4, 5, 6, 7],[3.5, 4.5, 5.5, 6.5, 7, 8]];
var demoY = [[12, 32, 23, 15, 17, 27, 22], [10, 20, 30, 25, 15, 28]];
var xVals =[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58];
var yVals = [0.03100,0.02259,0.02623,0.01967,0.01967,0.00788,0.02217,0.0137,0.01237,0.01764,0.0131,0.00942,0.0076,0.01463,0.02882,0.02093,0.02502,0.01961,0.01551,0.02227,0.0164,0.0191,0.00774,0.03076,0.0281,0.01338,0.02763,0.02334,0.00557,0.00023,0.01523,0.0263,0.03077,0.02404,0.02492,0.01954,0.01954,0.02337,0.01715,0.02271,0.00815,0.01343,0.00985,0.01837,0.00749,0.02967,0.01156,0.0083,0.00209,0.01538,0.01348,0.01353];
//r.text(160, 10, "Symbols, axis and hover effect").attr(txtattr);
var lines = r.linechart(10, 10, 300, 220, xVals, yVals, { nostroke: false, axis: "0 0 1 1", symbol: "circle", smooth: true })
.hoverColumn(function () {
this.tags = r.set();
for (var i = 0, ii = this.y.length; i < ii; i++) {
this.tags.push(r.tag(this.x, this.y[i], this.values[i], 160, 10).insertBefore(this).attr([{ fill: "#fff" }, { fill: this.symbols[i].attr("fill") }]));
}
}, function () {
this.tags && this.tags.remove();
});
lines.symbols.attr({ r: 3 });
Спасибо
1 ответ
Извините, я не очень знаком с gRaphael, но я нашел, что преобразование вашего yVals
в целые числа (умножая каждый на 1e5
Казалось, избавить вашу таблицу от неловкого поведения.
Это говорит о том, что это может быть связано с алгоритмом, который gRaphael использует для нахождения максимального значения оси (как вы задаете в связанном вопросе), когда ваши значения представляют собой небольшие десятичные значения (и изменяются даже на более значимые цифры).
Я знаю, что есть проблемы с точностью с плавающей точкой, но я не уверен, что это применимо к вашему случаю или что ваши значения достаточно низкие, чтобы учесть это.
Не лучший обходной путь, но если это будет возможно для вас, вы можете отобразить yValues
на порядок больше, и напомните зрителю, что они на самом деле меньше представленных. Например, ваш график может быть от 0 до 3100 и напоминать зрителю, что масштаб scale * 1e-5
,