delimiter: ',',
- logScale: false,
sigma: 2.0,
errorBars: false,
fractions: false,
var area = this.plotter_.area;
var yRange = this.yAxisRange(axis);
- if (!this.attr_("logscale")) {
+ if (!axis.logscale) {
return yRange[0] + (area.h - y) / area.h * (yRange[1] - yRange[0]);
} else {
// Computing the inverse of toDomCoord.
if (y == null) {
return null;
}
+ if (typeof(axis) == "undefined") axis = 0;
var area = this.plotter_.area;
var yRange = this.yAxisRange(axis);
var pct;
- if (!this.attr_("logscale")) {
+ if (!this.axes_[axis].logscale) {
// yrange[1] - y is unit distance from the bottom.
// yrange[1] - yrange[0] is the scale of the range.
// (yRange[1] - y) / (yRange[1] - yRange[0]) is the % from the bottom.
* Add ticks when the x axis has numbers on it (instead of dates)
* TODO(konigsberg): Update comment.
*
- * @param {Number} startDate Start of the date window (millis since epoch)
- * @param {Number} endDate End of the date window (millis since epoch)
+ * @param {Number} minV minimum value
+ * @param {Number} maxV maximum value
* @param self
* @param {function} attribute accessor function.
* @return {Array.<Object>} Array of {label, value} tuples.
ticks.push({v: vals[i]});
}
} else {
- if (self.attr_("logscale")) {
+ if (axis_props && attr("logscale")) {
// As opposed to the other ways for computing ticks, we're just going
// for nearby values. There's no reasonable way to scale the values
// (unless we want to show strings like "log(" + x + ")") in which case
// so compute height / pixelsPerTick and move on.
var pixelsPerTick = attr('pixelsPerYLabel');
+ // NOTE(konigsberg): Dan, should self.height_ be self.plotter_.area.h?
var nTicks = Math.floor(self.height_ / pixelsPerTick);
var vv = minV;
* number of axes, rolling averages, etc.
*/
Dygraph.prototype.predraw_ = function() {
- // TODO(danvk): move more computations out of drawGraph_ and into here.
+ // TODO(danvk): movabilitye more computations out of drawGraph_ and into here.
this.computeYAxes_();
// Create a new plotter.
'pixelsPerYLabel',
'yAxisLabelWidth',
'axisLabelFontSize',
- 'axisTickSize'
+ 'axisTickSize',
+ 'logscale'
];
// Copy global axis options over to the first axis.
// Compute extreme values, a span and tick marks for each axis.
for (var i = 0; i < this.axes_.length; i++) {
- var isLogScale = this.attr_("logscale");
var axis = this.axes_[i];
if (axis.valueWindow) {
// This is only set if the user has zoomed on the y-axis. It is never set
var maxAxisY;
var minAxisY;
- if (isLogScale) {
+ if (axis.logscale) {
var maxAxisY = maxY + 0.1 * span;
var minAxisY = minY;
} else {
<body>
<h1>Log scale demo - work in progress</h1>
+ <h2>x-axis of dates</h2>
<div id="div_g" style="width:600px; height:300px;"></div>
+ <h2>x-axis of numbers</h2>
+ <div id="div_g2" style="width:600px; height:300px;"></div>
<input type="button" value="log scale" onclick="logScale()">
<input type="button" value="linear scale" onclick="linearScale()">
"20101206,30\n"+
"20101207,80\n"+
"20101208,100\n"+
- "20101209,250\n"+
+ "20101209,500\n"+
"";
}
var g = new Dygraph(document.getElementById("div_g"),
Data, { logscale : true });
- Dygraph.addEvent(g.canvas_, '_mousemove', function(e) {
- var y = Dygraph.pageY(e) - Dygraph.findPosY(g.canvas_);
- console.log(y, g.toDataYCoord(y));
- });
+ function Data2() {
+ return "X,A\n" +
+ "1,5\n"+
+ "2,10\n"+
+ "3,100\n"+
+ "4,250\n"+
+ "5,1000\n"+
+ "6,30\n"+
+ "7,80\n"+
+ "8,100\n"+
+ "9,500\n"+
+ "";
+ }
+ var g2 = new Dygraph(document.getElementById("div_g2"),
+ Data2, { logscale : true });
function logScale() {
g.updateOptions({ logscale : true });
+ g2.updateOptions({ logscale : true });
}
function linearScale() {
g.updateOptions({ logscale : false });
+ g2.updateOptions({ logscale : false });
}
</script>