mirror of
https://github.com/morrisjs/morris.js.git
synced 2024-11-10 21:36:34 +01:00
Merge branch 'grid-parallel-lines' of https://github.com/tiraeth/morris.js into tiraeth-grid-parallel-lines
This commit is contained in:
commit
0dc74db428
56
examples/events.html
Normal file
56
examples/events.html
Normal file
@ -0,0 +1,56 @@
|
||||
<!doctype html>
|
||||
<head>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
|
||||
<script src="https://raw.github.com/DmitryBaranovskiy/raphael/300aa589f5a0ba7fce667cd62c7cdda0bd5ad904/raphael-min.js"></script>
|
||||
<script src="../morris.js"></script>
|
||||
<script src="lib/prettify.js"></script>
|
||||
<script src="lib/example.js"></script>
|
||||
<link rel="stylesheet" href="lib/example.css">
|
||||
<link rel="stylesheet" href="lib/prettify.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Time Events</h1>
|
||||
<div id="graph"></div>
|
||||
<pre id="code" class="prettyprint linenums">
|
||||
var week_data = [
|
||||
{"period": "2011 W27", "licensed": 3407, "sorned": 660},
|
||||
{"period": "2011 W26", "licensed": 3351, "sorned": 629},
|
||||
{"period": "2011 W25", "licensed": 3269, "sorned": 618},
|
||||
{"period": "2011 W24", "licensed": 3246, "sorned": 661},
|
||||
{"period": "2011 W23", "licensed": 3257, "sorned": 667},
|
||||
{"period": "2011 W22", "licensed": 3248, "sorned": 627},
|
||||
{"period": "2011 W21", "licensed": 3171, "sorned": 660},
|
||||
{"period": "2011 W20", "licensed": 3171, "sorned": 676},
|
||||
{"period": "2011 W19", "licensed": 3201, "sorned": 656},
|
||||
{"period": "2011 W18", "licensed": 3215, "sorned": 622},
|
||||
{"period": "2011 W17", "licensed": 3148, "sorned": 632},
|
||||
{"period": "2011 W16", "licensed": 3155, "sorned": 681},
|
||||
{"period": "2011 W15", "licensed": 3190, "sorned": 667},
|
||||
{"period": "2011 W14", "licensed": 3226, "sorned": 620},
|
||||
{"period": "2011 W13", "licensed": 3245, "sorned": null},
|
||||
{"period": "2011 W12", "licensed": 3289, "sorned": null},
|
||||
{"period": "2011 W11", "licensed": 3263, "sorned": null},
|
||||
{"period": "2011 W10", "licensed": 3189, "sorned": null},
|
||||
{"period": "2011 W09", "licensed": 3079, "sorned": null},
|
||||
{"period": "2011 W08", "licensed": 3085, "sorned": null},
|
||||
{"period": "2011 W07", "licensed": 3055, "sorned": null},
|
||||
{"period": "2011 W06", "licensed": 3063, "sorned": null},
|
||||
{"period": "2011 W05", "licensed": 2943, "sorned": null},
|
||||
{"period": "2011 W04", "licensed": 2806, "sorned": null},
|
||||
{"period": "2011 W03", "licensed": 2674, "sorned": null},
|
||||
{"period": "2011 W02", "licensed": 1702, "sorned": null},
|
||||
{"period": "2011 W01", "licensed": 1732, "sorned": null}
|
||||
];
|
||||
Morris.Line({
|
||||
element: 'graph',
|
||||
data: week_data,
|
||||
xkey: 'period',
|
||||
ykeys: ['licensed', 'sorned'],
|
||||
labels: ['Licensed', 'SORN'],
|
||||
events: [
|
||||
'2011-04',
|
||||
'2011-08'
|
||||
]
|
||||
});
|
||||
</pre>
|
||||
</body>
|
32
examples/goals.html
Normal file
32
examples/goals.html
Normal file
@ -0,0 +1,32 @@
|
||||
<!doctype html>
|
||||
<head>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
|
||||
<script src="https://raw.github.com/DmitryBaranovskiy/raphael/300aa589f5a0ba7fce667cd62c7cdda0bd5ad904/raphael-min.js"></script>
|
||||
<script src="../morris.js"></script>
|
||||
<script src="lib/prettify.js"></script>
|
||||
<script src="lib/example.js"></script>
|
||||
<link rel="stylesheet" href="lib/example.css">
|
||||
<link rel="stylesheet" href="lib/prettify.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Value Goals</h1>
|
||||
<div id="graph"></div>
|
||||
<pre id="code" class="prettyprint linenums">
|
||||
var decimal_data = [];
|
||||
for (var x = 0; x <= 360; x += 10) {
|
||||
decimal_data.push({
|
||||
x: x,
|
||||
y: Math.sin(Math.PI * x / 180).toFixed(4)
|
||||
});
|
||||
}
|
||||
window.m = Morris.Line({
|
||||
element: 'graph',
|
||||
data: decimal_data,
|
||||
xkey: 'x',
|
||||
ykeys: ['y'],
|
||||
labels: ['sin(x)'],
|
||||
parseTime: false,
|
||||
goals: [-1, 0, 1]
|
||||
});
|
||||
</pre>
|
||||
</body>
|
@ -51,12 +51,33 @@ class Morris.Grid extends Morris.EventEmitter
|
||||
preUnits: ''
|
||||
ymax: 'auto'
|
||||
ymin: 'auto 0'
|
||||
goals: []
|
||||
goalStrokeWidth: 1.0
|
||||
goalLineColors: [
|
||||
'#666633'
|
||||
'#999966'
|
||||
'#cc6666'
|
||||
'#663333'
|
||||
]
|
||||
events: []
|
||||
eventStrokeWidth: 1.0
|
||||
eventLineColors: [
|
||||
'#005a04'
|
||||
'#ccffbb'
|
||||
'#3a5f0b'
|
||||
'#005502'
|
||||
]
|
||||
|
||||
# Update the data series and redraw the chart.
|
||||
#
|
||||
setData: (data, redraw = true) ->
|
||||
ymax = if @cumulative then 0 else null
|
||||
ymin = if @cumulative then 0 else null
|
||||
|
||||
if @options.goals.length > 0
|
||||
ymax = Math.max(ymax, Math.max.apply(null,@options.goals))
|
||||
ymin = Math.min(ymin, Math.min.apply(null,@options.goals))
|
||||
|
||||
@data = $.map data, (row, index) =>
|
||||
ret = {}
|
||||
ret.label = row[@options.xkey]
|
||||
@ -94,6 +115,13 @@ class Morris.Grid extends Morris.EventEmitter
|
||||
# calculate horizontal range of the graph
|
||||
@xmin = @data[0].x
|
||||
@xmax = @data[@data.length - 1].x
|
||||
|
||||
@events = []
|
||||
if @options.parseTime and @options.events.length > 0
|
||||
@events = $.map @options.events, (event, index) => Morris.parseDate(event)
|
||||
@xmax = Math.max(@xmax, Math.max.apply(null,@events))
|
||||
@xmin = Math.min(@xmin, Math.min.apply(null,@events))
|
||||
|
||||
if @xmin is @xmax
|
||||
@xmin -= 1
|
||||
@xmax += 1
|
||||
@ -174,8 +202,25 @@ class Morris.Grid extends Morris.EventEmitter
|
||||
@r.clear()
|
||||
@_calc()
|
||||
@drawGrid()
|
||||
@drawGoals()
|
||||
@drawEvents()
|
||||
@draw() if @draw
|
||||
|
||||
# draw goals horizontal lines
|
||||
#
|
||||
drawGoals: ->
|
||||
for goal, i in @options.goals
|
||||
@r.path("M#{@left},#{@transY(goal)}H#{@left + @width}")
|
||||
.attr('stroke', @options.goalLineColors[i % @options.goalLineColors.length])
|
||||
.attr('stroke-width', @options.goalStrokeWidth)
|
||||
|
||||
# draw events vertical lines
|
||||
drawEvents: ->
|
||||
for event, i in @events
|
||||
@r.path("M#{@transX(event)},#{@bottom}V#{@top}")
|
||||
.attr('stroke', @options.eventLineColors[i % @options.eventLineColors.length])
|
||||
.attr('stroke-width', @options.eventStrokeWidth)
|
||||
|
||||
# draw y axis labels, horizontal lines
|
||||
#
|
||||
drawGrid: ->
|
||||
|
44
morris.js
44
morris.js
@ -105,7 +105,13 @@
|
||||
postUnits: '',
|
||||
preUnits: '',
|
||||
ymax: 'auto',
|
||||
ymin: 'auto 0'
|
||||
ymin: 'auto 0',
|
||||
goals: [],
|
||||
goalStrokeWidth: 1.0,
|
||||
goalLineColors: ['#666633', '#999966', '#cc6666', '#663333'],
|
||||
events: [],
|
||||
eventStrokeWidth: 1.0,
|
||||
eventLineColors: ['#005a04', '#ccffbb', '#3a5f0b', '#005502']
|
||||
};
|
||||
|
||||
Grid.prototype.setData = function(data, redraw) {
|
||||
@ -116,6 +122,10 @@
|
||||
}
|
||||
ymax = this.cumulative ? 0 : null;
|
||||
ymin = this.cumulative ? 0 : null;
|
||||
if (this.options.goals.length > 0) {
|
||||
ymax = Math.max(ymax, Math.max.apply(null, this.options.goals));
|
||||
ymin = Math.min(ymin, Math.min.apply(null, this.options.goals));
|
||||
}
|
||||
this.data = $.map(data, function(row, index) {
|
||||
var idx, ret, total, ykey, yval;
|
||||
ret = {};
|
||||
@ -173,6 +183,14 @@
|
||||
}
|
||||
this.xmin = this.data[0].x;
|
||||
this.xmax = this.data[this.data.length - 1].x;
|
||||
this.events = [];
|
||||
if (this.options.parseTime && this.options.events.length > 0) {
|
||||
this.events = $.map(this.options.events, function(event, index) {
|
||||
return Morris.parseDate(event);
|
||||
});
|
||||
this.xmax = Math.max(this.xmax, Math.max.apply(null, this.events));
|
||||
this.xmin = Math.min(this.xmin, Math.min.apply(null, this.events));
|
||||
}
|
||||
if (this.xmin === this.xmax) {
|
||||
this.xmin -= 1;
|
||||
this.xmax += 1;
|
||||
@ -266,11 +284,35 @@
|
||||
this.r.clear();
|
||||
this._calc();
|
||||
this.drawGrid();
|
||||
this.drawGoals();
|
||||
this.drawEvents();
|
||||
if (this.draw) {
|
||||
return this.draw();
|
||||
}
|
||||
};
|
||||
|
||||
Grid.prototype.drawGoals = function() {
|
||||
var goal, i, _i, _len, _ref, _results;
|
||||
_ref = this.options.goals;
|
||||
_results = [];
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
goal = _ref[i];
|
||||
_results.push(this.r.path("M" + this.left + "," + (this.transY(goal)) + "H" + (this.left + this.width)).attr('stroke', this.options.goalLineColors[i % this.options.goalLineColors.length]).attr('stroke-width', this.options.goalStrokeWidth));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Grid.prototype.drawEvents = function() {
|
||||
var event, i, _i, _len, _ref, _results;
|
||||
_ref = this.events;
|
||||
_results = [];
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
event = _ref[i];
|
||||
_results.push(this.r.path("M" + (this.transX(event)) + "," + this.bottom + "V" + this.top).attr('stroke', this.options.eventLineColors[i % this.options.eventLineColors.length]).attr('stroke-width', this.options.eventStrokeWidth));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Grid.prototype.drawGrid = function() {
|
||||
var firstY, lastY, lineY, v, y, _i, _ref, _results;
|
||||
firstY = this.ymin;
|
||||
|
2
morris.min.js
vendored
2
morris.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user