|
Даю задания для студентов. Они хотят повторно пройти курс. Как отписаться от выполненного курса, что бы пройти его заново? |
Визуализации данных с помощью библиотекиJIT. Знакомство с JavaScript Object Notation (JSON)
На предыдущих практических занятиях для построения графиков мы использовали библиотеки jsapi.js и jQuery. В предлагаемой работе мы воспользуемся библиотекой jit, разработанной NicolasGarciaBelmonteиз SenchaInc. Для этого нам потребуется скачать пример с сайта http://philogb.github.com/. В файле index.html замените содержимое на следующий код:
index.html
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en">
<head>
<metahttp-equiv="Content-Type"content="text/html"; charset="Windows-1251"/>
<title>Образец графика с областями</title>
<!-- CSS Files -->
<linktype="text/css"href="base.css"rel="stylesheet"/>
<linktype="text/css"href="AreaChart.css"rel="stylesheet"/>
<!--[if IE]><script language="javascript" type="text/javascript" src="../../Extras/excanvas.js"></script><![endif]-->
<!-- JIT Library File -->
<scriptlanguage="javascript"type="text/javascript"src="jit.js"></script>
<!-- Example File -->
<scriptlanguage="javascript"type="text/javascript"src="example1.js"></script>
</head>
<bodyonload="init();">
<divid="container">
<divid="left-container">
<divclass="text">
<h4>
Образец диаграммы с областями
</h4>
Образец статической диаграммы, отображающей данные в виде стопок
<br/><br/>
Нажмите левую кнопку мыши для выбора фильтра
<br/><br/>
Нажмите правую кнопку для восстановления стопок
<br/><br/>
Нажмите на кнопку "Обновить" для обновления данных JSON
</div>
<ulid="id-list"></ul>
<aid="update"href="#"class="theme button white">Обновитьданные</a>
<aid="restore"href="#"class="theme button white">Удалитьфильтр</a>
<divstyle="text-align:center;"><ahref="example1.js">Просмотретькод:</a></div>
</div>
<divid="center-container">
<divid="infovis"></div>
</div>
<divid="right-container">
<divid="inner-details"></div>
</div>
<divid="log"></div>
</div>
</body>
</html>
Затем в блокноте создайте следующий скрипт:
myScript.js
varlabelType, useGradients, nativeTextSupport, animate;
(function () {
varua = navigator.userAgent,
iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),
typeOfCanvas = typeofHTMLCanvasElement,
nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'),
textSupport = nativeCanvasSupport
&& (typeofdocument.createElement('canvas').getContext('2d').fillText == 'function');
//I'm setting this based on the fact that ExCanvas provides text support for IE
//and that as of today iPhone/iPad current text support is lame
labelType = (!nativeCanvasSupport || (textSupport&& !iStuff)) ? 'Native' : 'HTML';
nativeTextSupport = labelType == 'Native';
useGradients = nativeCanvasSupport;
animate = !(iStuff || !nativeCanvasSupport);
})();
var Log = {
elem: false,
write: function (text) {
if (!this.elem)
this.elem = document.getElementById('log');
this.elem.innerHTML = text;
this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px';
}
};
functioninit() {
//init data
varjson = {
'label': ['Вася', 'Петя', 'Марина', 'Ирина'],
'values': [
{
'label': 'Январь',
'values': [20, 40, 15, 5]
},
{
'label': 'Февраль',
'values': [30, 10, 45, 10]
},
{
'label': 'Март',
'values': [38, 20, 35, 17]
},
{
'label': 'Апрель',
'values': [58, 10, 35, 32]
},
{
'label': 'Май',
'values': [55, 60, 34, 38]
},
{
'label': 'Июнь',
'values': [26, 40, 25, 40]
}]
};
var json2 = {
'values': [
{
'label': 'Январь',
'values': [10, 40, 15, 7]
},
{
'label': 'Февраль',
'values': [30, 40, 45, 9]
},
{
'label': 'Май',
'values': [55, 30, 34, 26]
},
{
'label': 'Июнь',
'values': [26, 40, 85, 28]
}]
};
//end
varinfovis = document.getElementById('infovis');
//initAreaChart
varareaChart = new $jit.AreaChart({
//id of the visualization container
injectInto: 'infovis',
//add animations
animate: true,
//separation offsets
Margin: {
top: 5,
left: 5,
right: 5,
bottom: 5
},
labelOffset: 10,
//whether to display sums
showAggregates: true,
//whether to display labels at all
showLabels: true,
//could also be 'stacked'
type: useGradients ? 'stacked:gradient' : 'stacked',
//label styling
Label: {
type: labelType, //can be 'Native' or 'HTML'
size: 13,
family: 'Arial',
color: 'white'
},
//enable tips
Tips: {
enable: true,
onShow: function (tip, elem) {
tip.innerHTML = "<b>" + elem.name + "</b>: " + elem.value;
}
},
//add left and right click handlers
filterOnClick: true,
restoreOnRightClick: true
});
//load JSON data.
areaChart.loadJSON(json);
//end
var list = $jit.id('id-list'),
button = $jit.id('update'),
restoreButton = $jit.id('restore');
//update json on click
$jit.util.addEvent(button, 'click', function () {
varutil = $jit.util;
if (util.hasClass(button, 'gray')) return;
util.removeClass(button, 'white');
util.addClass(button, 'gray');
areaChart.updateJSON(json2);
});
//restore graph on click
$jit.util.addEvent(restoreButton, 'click', function () {
areaChart.restore();
});
//dynamically add legend to list
var legend = areaChart.getLegend(),
listItems = [];
for (var name in legend) {
listItems.push('<div class=\'query-color\' style=\'background-color:'
+ legend[name] + '\'> </div>' + name);
}
list.innerHTML = '<li>' + listItems.join('</li><li>') + '</li>';
}
Файлы AreaChart.css, base.cssиjit.js можно использовать без изменения. Хотелось бы обратить ваше внимание на способ представления данных для графиков:
varjson = {
'label': ['Вася', 'Петя', 'Марина', 'Ирина'],
'values': [
{
'label': 'Январь',
'values': [20, 40, 15, 5]
},
{
'label': 'Февраль',
'values': [30, 10, 45, 10]
},
{
'label': 'Март',
'values': [38, 20, 35, 17]
},
{
'label': 'Апрель',
'values': [58, 10, 35, 32]
},
{
'label': 'Май',
'values': [55, 60, 34, 38]
},
{
'label': 'Июнь',
'values': [26, 40, 25, 40]
}]
};
var json2 = {
'values': [
{
'label': 'Январь',
'values': [10, 40, 15, 7]
},
{
'label': 'Февраль',
'values': [30, 40, 45, 9]
},
{
'label': 'Май',
'values': [55, 30, 34, 26]
},
{
'label': 'Июнь',
'values': [26, 40, 85, 28]
}]
Здесь мы имеем дело с JavaScript Object Notation (JSON). JSON хорошо подходит для описания сложных структур данных. JSON содержит наборы пар ключ/значение. В нашем случае, например, ключу 'Январь' соответствуют значения: [20, 40, 15, 5].
Результат:
Разработайте собственный пример построения диаграмм.
