Построение гистограмм с помощью JavaScript"Праздник, который всегда с тобой" писал Хемингуэй про Париж и вино. Если дать волю воображению, то эту фразу можно применить и к JavaScript. Нужен простой рассчет, используем внешний или встроенный калькулятор. Серьезный рассчет - без специализированной программы не обойтись. А вот в случае промежуточном отлично работает JavaScript. "На коленочке" (в "блокноте") набираем несколько программных строк, сохраняем как html-файл, открываем его в браузер, и вуаля! Решение на экране. Надеюсь, вы не допустили ошибок в коде ;-) Пример 1. Площади территорий стран мира, млн. кв. кмПример 2. Наиболее населенные страны в 2004, млн. житилейНиже приведен javascript-код для построения гистограмм. <script> var arrText = new Array( "Российская Федерация", "Канада", "Китай", "США", "Бразилия" ); var arrValue = new Array( 17.075 , 9.976, 9.596, 9.363, 8.511 ); drawGraphHoriz( arrText, arrValue, 400, 0 ); </script> <script> var arrText2 = new Array( "China", "India", "USA", "Indonesia", "Brazil", "Pakistan", "Russia", "Bangladesh", "Nigeria", "Japan", "Mexico" ); var arrValue2 = new Array( 1286 , 1049, 290, 234, 182, 150, 144, 138, 133, 127, 104 ); drawGraphVert( arrText2, arrValue2, 400, 0, 60 ); </script> Ниже приведен javascript-код поддержки построения гистограмм. <script> //red, orange, yellow, green, blue, violet, cyan, gray var arrCol8 = new Array( "#ff0000", "#ffaa00", "#ffff00", "#00ff00", "#00aaff", "#0000bb", "#aa00aa", "#cccccc" ); function drawGraphHoriz( arrText, arrValue, width, border ) { var i, j; if( "" + width == "undefined" ) width = 400; if( "" + border == "undefined" ) border = 1; var nCol = arrCol8.length; var len = arrText.length; var dMax = 0, iWidthSpan; for( i = 0; i < arrValue.length; i++ ) { if( dMax < arrValue[ i ] ) dMax = arrValue[ i ]; } document.writeln( "<table border='" + border + "'>" ); for( i = 0; i < arrText.length; i++ ) { j = i % nCol; iWidthSpan = Math.ceil( ( arrValue[ i ] * width ) / dMax ); document.writeln( "<tr>" ); document.writeln( "<td>" + arrText[ i ] + "</td>" ); document.writeln( "<td><span style='background-color:" + arrCol8[ j ] + "; width:" + iWidthSpan + "'> " + arrValue[ i ] + "</span></td>" ); document.writeln( "</tr>" ); } document.writeln( "</table>" ); } function drawGraphVert( arrText, arrValue, height, border, width ) { var i, j; if( "" + height == "undefined" ) height = 400; if( "" + border == "undefined" ) border = 1; if( "" + width == "undefined" ) width = 0; var nCol = arrCol8.length; var len = arrText.length; var dMax = 0, iHeightSpan; for( i = 0; i < arrValue.length; i++ ) { if( dMax < arrValue[ i ] ) dMax = arrValue[ i ]; } document.writeln( "<table border='" + border + "'>" ); document.writeln( "<tr>" ); for( i = 0; i < arrText.length; i++ ) { j = i % nCol; iHeightSpan = Math.ceil( ( arrValue[ i ] * height ) / dMax ); document.writeln( "<td align='center' valign='bottom'><span style='background-color:" + arrCol8[ j ] + "; width:30px; height:" + iHeightSpan + "px'> " + arrValue[ i ] + "</span></td>" ); } document.writeln( "</tr>" ); document.writeln( "<tr>" ); for( i = 0; i < arrText.length; i++ ) { document.writeln( "<td" ); if( width > 0 ) document.writeln( " width='" + width + "'" ); document.writeln( " align='center'>" + arrText[ i ] + "</td>" ); } document.writeln( "</tr>" ); document.writeln( "</table>" ); } </script> Немного комментариев. Алгоритм. Находим максимальное числовое значение в массиве arrValue - dMax. Выводим в документ заголок таблицы <table>, затем для каждого элемента arrText создаем ячейку <td>, в следующей ячейке создаем элемент <span>, в стиле которого прописываем цвет arrCol8[ j ] и ширину iWidthSpan (которая пропорциональна arrValue[i] и обратно пропорциональна dMax). Закрываем таблицу </table>. Функция drawGraphVert имеет дополнительный аргумент, который управляет шириной ячеек таблицы. Приведенные функции страдают недостатком обработки ошибок и малой параметризацией (например, нет управления цветом фона). Работу над их устранением будем считать домашним заданием. Результаты пишите в форум. |