<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF115%3AJpGraph</id>
		<title>LXF115:JpGraph - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF115%3AJpGraph"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;action=history"/>
		<updated>2026-05-13T23:42:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9544&amp;oldid=prev</id>
		<title>Crazy Rebel в 12:42, 22 января 2010</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9544&amp;oldid=prev"/>
				<updated>2010-01-22T12:42:13Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 12:42, 22 января 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 51:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 51:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как правило, диаграммы и графики строятся по набору данных, представлением которого в языках программирования является массив: его мы и объявляем в строке '''5'''. Конечно, пример наигран, и для изменения графика требуется правка исходных текстов – в реальной ситуации информация может поступать из базы данных или считываться из файла. В строке '''6''' мы создаем объект класса '''Graph''', передавая ему 2 параметра – ширину и высоту изображения. Следующая строка отвечает за масштабирование. В строке '''8''' мы создаем график-линию, передавая в конструктор класса данные нашего массива, а в строке '''9''' указываем его цвет. Наконец, в строке '''10''' мы добавляем наш график к изображению, а в строке '''11''' непосредственно генерируем (отрисовываем) его.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как правило, диаграммы и графики строятся по набору данных, представлением которого в языках программирования является массив: его мы и объявляем в строке '''5'''. Конечно, пример наигран, и для изменения графика требуется правка исходных текстов – в реальной ситуации информация может поступать из базы данных или считываться из файла. В строке '''6''' мы создаем объект класса '''Graph''', передавая ему 2 параметра – ширину и высоту изображения. Следующая строка отвечает за масштабирование. В строке '''8''' мы создаем график-линию, передавая в конструктор класса данные нашего массива, а в строке '''9''' указываем его цвет. Наконец, в строке '''10''' мы добавляем наш график к изображению, а в строке '''11''' непосредственно генерируем (отрисовываем) его.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_76_1.jpg| 300px| Рис. 1]] Рис. 1. Наш «первый блин»: все бы неплохо, но чего-то не хватает. | Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ну вот, наш первый график готов (рис. 1), но для неподготовленного человека он пока ничего не значит и не несет никакой полезной информации. Давайте снабдим его подписями и разъяснениями – добавим после строки '''7''' следующий код:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ну вот, наш первый график готов (рис. 1), но для неподготовленного человека он пока ничего не значит и не несет никакой полезной информации. Давайте снабдим его подписями и разъяснениями – добавим после строки '''7''' следующий код:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 118:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 120:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Глядя на график, сложно понять, что означает каждая из линий, поэтому добавим легенду:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Глядя на график, сложно понять, что означает каждая из линий, поэтому добавим легенду:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_77_1.jpg| 300px| Рис. 2]]   Рис. 2. После некоторой доводки график выглядит уже весьма профессионально. | Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 187:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Разберемся, что происходит в этих строках. В первую очередь, мы подключаем библиотеку '''jpgraph_utils.inc.php''', которая содержит вспомогательные утилиты, в том числе и класс генерации данных для функций (нормальных и параметрических), и уже в '''5'''-й строке создаем объект этого класса. Обратите внимание, что самая функция представлена строкой, содержащей ''PHP''-конструкцию с переменной '''$x''': это необходимо для безопасности вашего приложения. В строке '''6''' мы вычисляем значения функции в виде пар ('''x,y=f(x)''') на некотором множестве точек в диапазоне от 0 до 10.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Разберемся, что происходит в этих строках. В первую очередь, мы подключаем библиотеку '''jpgraph_utils.inc.php''', которая содержит вспомогательные утилиты, в том числе и класс генерации данных для функций (нормальных и параметрических), и уже в '''5'''-й строке создаем объект этого класса. Обратите внимание, что самая функция представлена строкой, содержащей ''PHP''-конструкцию с переменной '''$x''': это необходимо для безопасности вашего приложения. В строке '''6''' мы вычисляем значения функции в виде пар ('''x,y=f(x)''') на некотором множестве точек в диапазоне от 0 до 10.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_78_1.jpg| 300px| Рис. 3]] Рис. 3. Гладкая кривая ''JpGraph'' тоже по плечу. | Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Со строки '''7''' по '''15''' мы создаем разметку. Особое внимание тут стоит уделить конструкции '''SymChar::Get(‘pi’)''' – вызов статической функции '''Get''' класса '''SymChar''', которая возвращает символы греческого алфавита, в нашем случае это «пи». В строке '''24''' вызывается метод '''SetMajTickPositions()''', который расставляет наши метки (разметку) в соответствии с вычисленными позициями.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Со строки '''7''' по '''15''' мы создаем разметку. Особое внимание тут стоит уделить конструкции '''SymChar::Get(‘pi’)''' – вызов статической функции '''Get''' класса '''SymChar''', которая возвращает символы греческого алфавита, в нашем случае это «пи». В строке '''24''' вызывается метод '''SetMajTickPositions()''', который расставляет наши метки (разметку) в соответствии с вычисленными позициями.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 218:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 224:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Основное отличие этого кода от виденного нами ранее кроется в строке '''8''': мы используем класс '''BarPlot''' вместо '''LinePlot'''. Из полученной гистограммы мы вряд ли извлечем какие-либо полезные данные, ведь нет ни подписей, ни легенды. По традиции, усовершенствуем ее, и начнем с установки ширины столбцов:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Основное отличие этого кода от виденного нами ранее кроется в строке '''8''': мы используем класс '''BarPlot''' вместо '''LinePlot'''. Из полученной гистограммы мы вряд ли извлечем какие-либо полезные данные, ведь нет ни подписей, ни легенды. По традиции, усовершенствуем ее, и начнем с установки ширины столбцов:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_79_1.jpg| 300px| Рис. 4]]  Рис. 4. Обратите внимание — пик посещаемости приходится на середину рабочего дня. К чему бы это?  | Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; $bplot-&amp;gt;SetWidth(0.9);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; $bplot-&amp;gt;SetWidth(0.9);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 244:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 252:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Очень часто значения посещаемости на выходных отличаются от показателей в будние дни, когда люди находятся на работе: здесь нам пригодятся сгруппированные гистограммы. Подготовим вторую гистограмму, имитирующую посещаемость нашего вымышленного сайта в нерабочее время:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Очень часто значения посещаемости на выходных отличаются от показателей в будние дни, когда люди находятся на работе: здесь нам пригодятся сгруппированные гистограммы. Подготовим вторую гистограмму, имитирующую посещаемость нашего вымышленного сайта в нерабочее время:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_79_2.jpg| 300px| Рис. 5]]  Рис. 5. Гистограммы можно выводить вместе – это позволяет быстрее находить в них различия.| Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; $visits2 = array(183, 225, 454, 2123, 2456, 1345);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; $visits2 = array(183, 225, 454, 2123, 2456, 1345);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 272:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 282:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Антиспаммер===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Антиспаммер===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка | Содержание= [[Изображение: LXF115_79_3.jpg| 300px| Рис. 6]]  Рис. 6. Антиспаммер| Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В мире развелось слишком много спамеров, флудеров и просто «хороших людей», к тому же многие из них – это программы. Одним из способов защиты от таких «гостей» является ввод пользователем секретного кода с картинки, отображаемой на сайте (так называемой «captcha»). Программе тяжело распознавать нестандартные кривые символы, а человеку это под силу, и, как вы уже догадались, в ''JpGraph'' есть возможность создавать их. Чтобы объяснить, как это работает, достаточно пяти строк:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В мире развелось слишком много спамеров, флудеров и просто «хороших людей», к тому же многие из них – это программы. Одним из способов защиты от таких «гостей» является ввод пользователем секретного кода с картинки, отображаемой на сайте (так называемой «captcha»). Программе тяжело распознавать нестандартные кривые символы, а человеку это под силу, и, как вы уже догадались, в ''JpGraph'' есть возможность создавать их. Чтобы объяснить, как это работает, достаточно пяти строк:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9543&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Дополнительные возможности */</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9543&amp;oldid=prev"/>
				<updated>2010-01-22T12:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Дополнительные возможности&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 12:35, 22 января 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 304:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 304:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*: Первый параметр сообщает, что мы будем использовать изображение, второй задает его местоположение, а третий отвечает за масштаб. Можно использовать и одно из встроенных изображений, например:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*: Первый параметр сообщает, что мы будем использовать изображение, второй задает его местоположение, а третий отвечает за масштаб. Можно использовать и одно из встроенных изображений, например:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;      $lineplot2-&amp;gt;mark-&amp;gt;SetTYPE(MARK_IMG_BALL,’red’,1.0);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;      $lineplot2-&amp;gt;mark-&amp;gt;SetTYPE(MARK_IMG_BALL,’red’,1.0);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Технический аспект===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Обратите внимание, что все наши скрипты генерируют не html-файл, а картинку, то есть в заголовке передаваемого сервером ответа будет значиться “Content-Type: image/png”, и если вы попытаетесь вывести в вашей программе какой-либо текст, то получите ошибку. А как же тогда вставлять изображение на сайт? Очень просто: добавьте в html-документ тэг '''&amp;lt;img&amp;gt;''', в атрибуте '''src''' которого укажите URL вашего скрипта, а уж он сгенерирует файл «на лету» и передаст его в html-документ, не сохраняя на жестком диске. Впрочем, если график обновляется достаточно редко, его кэширование может иметь смысл. Откройте файл '''jpg-config.inc.php''' и раскомментируйте строку:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; DEFINE(&amp;quot;CACHE_DIR&amp;quot;,&amp;quot;/путь/до/каталога/где/будет/кэш/&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;а затем активируйте систему кэширования:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; DEFINE(&amp;quot;USE_CACHE&amp;quot;,true);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Создавая объект изображения, мы передаем ему ширину и высоту. Еще два параметра управляют процессом кэширования:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; $graph = new Graph(650, 450,&amp;quot;auto&amp;quot;,60);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Значение '''&amp;quot;auto&amp;quot;''' указывает на имя файла кэша; в нашем случае оно будет совпадать с именем скрипта. Число 60 задает время жизни, измеряемое в минутах.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9542&amp;oldid=prev</id>
		<title>Crazy Rebel: Новая: : '''JpGraph''' Добавьте графики в свои ''PHP''-сценарии!  {{Цикл/JpGraph}}  ==Графики и диаграммы==  : '''ЧАСТЬ 1''' Большие...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF115:JpGraph&amp;diff=9542&amp;oldid=prev"/>
				<updated>2010-01-22T12:33:19Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: : '''JpGraph''' Добавьте графики в свои ''PHP''-сценарии!  {{Цикл/JpGraph}}  ==Графики и диаграммы==  : '''ЧАСТЬ 1''' Большие...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''JpGraph''' Добавьте графики в свои ''PHP''-сценарии!&lt;br /&gt;
&lt;br /&gt;
{{Цикл/JpGraph}}&lt;br /&gt;
&lt;br /&gt;
==Графики и диаграммы==&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 1''' Большие начальники любят яркие графики – но даже если вы работаете на себя (или еще учитесь), от них тоже бывает польза. Какая? Спросите у '''Никиты Шультайса.'''&lt;br /&gt;
&lt;br /&gt;
Каждый день мы имеем дело с «тоннами» визуальной информации: часть ее представлена простым текстом, часть – в виде таблиц, а часть – в виде графиков и диаграмм. И так уж вышло, что оптимальными для восприятия являются именно «картинки» – грамотно построенная диаграмма&lt;br /&gt;
может сэкономить массу времени и нервов как для понимания информации, так и для ее объяснения. Поэтому сегодня мы будем&lt;br /&gt;
говорить о графическом представлении данных с помощью ''PHP''-библиотеки ''JpGraph'' (http://www.aditus.nu/jpgraph/), работающей&lt;br /&gt;
поверх стандартной GD. ''JpGraph'' – мощный инструмент, позволяющий создавать:&lt;br /&gt;
* гистограммы&lt;br /&gt;
* круговые диаграммы&lt;br /&gt;
* линейные графики&lt;br /&gt;
* биржевые диаграммы&lt;br /&gt;
* сетчатые диаграммы&lt;br /&gt;
* диаграммы Ганта&lt;br /&gt;
* антиспам-изображения (Capthca)&lt;br /&gt;
&lt;br /&gt;
''JpGraph'' – свободное ПО, распространяющееся по дуальной лицензии: довольно редкой сейчас Q Public License (QPL) 1.0 для применения в открытых проектах и обучения, а также традиционной коммерческой. Но, в отличие от инструментария ''Qt'', «породившего» QPL, свободная и коммерческая версии различаются по функционалу. Последняя носит название ''JpGraph Professional'' и, в дополнение к перечисленному выше, умеет отрисовывать «розы ветров», а также линейные и квадратные штрих-коды, широко применяемые в торговле.&lt;br /&gt;
&lt;br /&gt;
===Первый график===&lt;br /&gt;
&lt;br /&gt;
Первое, что нам потребуется – это скачать библиотеку или взять ее с '''LXFDVD'''. Обратите внимание, что в настоящее время доступны две ветки: ''JpGraph 1.x'' для ''PHP4'' и ''JpGraph 2.x'' для ''PHP 5.1'' и выше; мы воспользуемся последней. Как и с большинством ''PHP''-библиотек, для установки достаточно поместить ''JpGraph'' в корень вашего сайта, а затем подключить его из любого скрипта. Однако&lt;br /&gt;
это простое действие выполняется в два этапа:&lt;br /&gt;
&lt;br /&gt;
'''1''' Подключение ядра:&lt;br /&gt;
 include ( &amp;quot;./jpgraph/src/jpgraph.php&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
'''2''' Подключение дополнительных возможностей (например, если нам нужен график-линия, то потребуется скрипт ''jpgraph_line.php''):&lt;br /&gt;
&lt;br /&gt;
 include (&amp;quot;./jpgraph/src/jpgraph_line.php&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Перейдем от слов к делу и создадим наш первый график. Для примера возьмем среднее число посетителей интернет-сайта в день и проследим динамику в течение года. Создадим файл '''visits.php''' и добавим в него следующий код (номера строк, разумеется, добавлены только для удобства восприятия):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 &amp;lt;?&lt;br /&gt;
  2 include ( &amp;quot;./jpgraph/src/jpgraph.php&amp;quot;);&lt;br /&gt;
  3 include (&amp;quot;./jpgraph/src/jpgraph_line.php&amp;quot;);&lt;br /&gt;
  4&lt;br /&gt;
  5 $ydata = array(124, 235, 478, 432, 511, 512 , 533, 780, 789, 806, 933, 987);&lt;br /&gt;
  6 $graph = new Graph(650, 450);&lt;br /&gt;
  7 $graph-&amp;gt;SetScale(&amp;quot;textlin&amp;quot;);&lt;br /&gt;
  8 $lineplot = new LinePlot($ydata);&lt;br /&gt;
  9 $lineplot-&amp;gt;SetColor(&amp;quot;blue&amp;quot;);&lt;br /&gt;
  10 $graph-&amp;gt;Add($lineplot);&lt;br /&gt;
  11 $graph-&amp;gt;Stroke();&lt;br /&gt;
  12 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как правило, диаграммы и графики строятся по набору данных, представлением которого в языках программирования является массив: его мы и объявляем в строке '''5'''. Конечно, пример наигран, и для изменения графика требуется правка исходных текстов – в реальной ситуации информация может поступать из базы данных или считываться из файла. В строке '''6''' мы создаем объект класса '''Graph''', передавая ему 2 параметра – ширину и высоту изображения. Следующая строка отвечает за масштабирование. В строке '''8''' мы создаем график-линию, передавая в конструктор класса данные нашего массива, а в строке '''9''' указываем его цвет. Наконец, в строке '''10''' мы добавляем наш график к изображению, а в строке '''11''' непосредственно генерируем (отрисовываем) его.&lt;br /&gt;
&lt;br /&gt;
Ну вот, наш первый график готов (рис. 1), но для неподготовленного человека он пока ничего не значит и не несет никакой полезной информации. Давайте снабдим его подписями и разъяснениями – добавим после строки '''7''' следующий код:&lt;br /&gt;
&lt;br /&gt;
 $graph-&amp;gt;title-&amp;gt;Set(‘Посещаемость сайта в 2008 году’);&lt;br /&gt;
&lt;br /&gt;
В результате у графика появится заголовок.&lt;br /&gt;
&lt;br /&gt;
===А теперь по-русски===&lt;br /&gt;
&lt;br /&gt;
После обновления страницы вместо читаемого текста мы увидим «любимые крякозябры». Пока что наша библиотека не настроена на работу с кириллицей, но это поправимо: определим в файле '''jpg-config.inc.php''' константу '''TTF_DIR''', содержащую путь до каталога с TTF-шрифтами:&lt;br /&gt;
&lt;br /&gt;
  DEFINE(&amp;quot;TTF_DIR&amp;quot;,&amp;quot;/путь/до/TTF/шрифтов/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Там же настроим кодировки, сообщив системе, что в наших скриптах мы собираемся использовать UTF-8:&lt;br /&gt;
&lt;br /&gt;
  DEFINE(&amp;quot;LANGUAGE_CYRILLIC&amp;quot;,true);&lt;br /&gt;
  DEFINE(&amp;quot;CYRILLIC_FROM_WINDOWS&amp;quot;,false);&lt;br /&gt;
  DEFINE(‘LANGUAGE_CHARSET’, ‘utf-8’);&lt;br /&gt;
&lt;br /&gt;
И самое последнее – нужно указать нашему объекту '''graph''', какой шрифт следует применять для какого названия. Нас интересует заголовок графика ('''title'''), поэтому можно добавить нечто вроде&lt;br /&gt;
&lt;br /&gt;
  $graph-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
&lt;br /&gt;
Здесь я использую шрифт '''verdana.ttf'''.&lt;br /&gt;
&lt;br /&gt;
Продолжим наши усовершенствования – добавим на график дополнительную информацию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 $graph-&amp;gt;img-&amp;gt;SetMargin(80,30,30,60);&lt;br /&gt;
  2 $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;margin = 15;&lt;br /&gt;
  3 $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;Set(&amp;quot;Месяцы&amp;quot;);&lt;br /&gt;
  4 $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
  5 $graph-&amp;gt;yaxis-&amp;gt;title-&amp;gt;margin = 25;&lt;br /&gt;
  6 $graph-&amp;gt;yaxis-&amp;gt;title-&amp;gt;Set(&amp;quot;Посещаемость&amp;quot;);&lt;br /&gt;
  7 $graph-&amp;gt;yaxis-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В строке '''1''' мы указываем внутренние отступы для нашего изображения, а затем задаем дополнительные параметры координатных осей: так, в строках '''2''' и '''5''' определяется расстояние между подписью к оси и самой осью, в строках '''3''' и '''6''' – текст подписей, а в '''4''' и '''7''' – шрифты. Заметьте, что нам нужно задавать шрифты для каждого из объектов нашего графика, иначе мы будем наблюдать все&lt;br /&gt;
те же «крякозябры».&lt;br /&gt;
&lt;br /&gt;
То, что мы сейчас сделали, относится к изображению в целом и к осям; давайте обогатим информацией и нашу ломаную:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 $lineplot-&amp;gt;mark-&amp;gt;SetType(MARK_SQUARE);&lt;br /&gt;
  2 $lineplot-&amp;gt;value-&amp;gt;Show();&lt;br /&gt;
  3 $lineplot-&amp;gt;value-&amp;gt;SetColor(&amp;quot;blue&amp;quot;);&lt;br /&gt;
  4 $lineplot-&amp;gt;value-&amp;gt;SetFont(FF_VERDANA, FS_NORMAL);&lt;br /&gt;
  5 $lineplot-&amp;gt;value-&amp;gt;SetFormat(&amp;quot;%d&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке мы определяем маркер, обозначающий точку на графике (квадрат), в строках '''3''' и '''4''' задаются цвет и шрифт подписи к каждой точке, а в строке '''5''' – формат вывода значения (число).&lt;br /&gt;
&lt;br /&gt;
===Дайте два!===&lt;br /&gt;
&lt;br /&gt;
Зачастую нас и наших потенциальных рекламодателей интересует не только количество уникальных посетителей (хостов), но количество показанных страниц (хитов), поэтому изображение можно немного расширить, добавив еще одни график:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 $hits = array(604, 1205, 2078, 2032, 2510, 2502 , 2503, 3580, 3709, 4006, 4533, 4670);&lt;br /&gt;
  2 $lineplot2 = new LinePlot($hits);&lt;br /&gt;
  3 $lineplot2-&amp;gt;SetColor(&amp;quot;red&amp;quot;);&lt;br /&gt;
  4 $lineplot2-&amp;gt;SetWeight(2);&lt;br /&gt;
  5 $graph-&amp;gt;Add($lineplot2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и в предыдущем случае, мы создаем объект графика-линии ('''LinePlot'''). Новым параметром здесь является толщина линии, которую мы установили равной двум в строке '''4'''. График нужно не забыть добавить к изображению – это происходит в строке '''5'''.&lt;br /&gt;
&lt;br /&gt;
Глядя на график, сложно понять, что означает каждая из линий, поэтому добавим легенду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 $lineplot-&amp;gt;SetLegend(&amp;quot;Хост&amp;quot;);&lt;br /&gt;
  2 $lineplot2-&amp;gt;SetLegend(&amp;quot;Хит&amp;quot;);&lt;br /&gt;
  3 $graph-&amp;gt;legend-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
  4 $graph-&amp;gt;img-&amp;gt;SetMargin(80,130,30,80);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в строке '''4''' мы изменяем внутренние поля изображения, которые задавали в примерах выше: это необходимо, чтобы наша легенда не закрывала ни один из графиков. Кроме того, давайте заменим безликие номера месяцев их названиями:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
  1 $months = array(&amp;quot;январь&amp;quot;,&amp;quot;февраль&amp;quot;,&amp;quot;март&amp;quot;,&amp;quot;апрель&amp;quot;,&amp;quot;май&amp;quot;, &amp;quot;июнь&amp;quot;,&amp;quot;июль&amp;quot;,&amp;quot;август&amp;quot;,&amp;quot;сентябрь&amp;quot;,&amp;quot;октябрь&amp;quot;,&amp;quot;ноябрь&amp;quot;,&amp;quot;декабрь&amp;quot;);&lt;br /&gt;
  2 $graph-&amp;gt;xaxis-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
  3 $graph-&amp;gt;xaxis-&amp;gt;SetTickLabels($months);&lt;br /&gt;
  4 $graph-&amp;gt;xaxis-&amp;gt;SetLabelAngle(90);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В строке 4 мы определяем угол, на который будут повернуты подписи. Теперь можно удалить строку&lt;br /&gt;
&lt;br /&gt;
  $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;Set(&amp;quot;Месяцы&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
так как названия месяцев говорят сами за себя. И, наконец, завершим наши старания добавлением координатной сетки и ее раскрашиванием:&lt;br /&gt;
&lt;br /&gt;
 $graph-&amp;gt;ygrid-&amp;gt;Show(true);&lt;br /&gt;
 $graph-&amp;gt;xgrid-&amp;gt;Show(true);&lt;br /&gt;
 $graph-&amp;gt;ygrid-&amp;gt;SetFill(true,’#EFEFEF@0.5’,’#BBCCFF@0.5’);&lt;br /&gt;
&lt;br /&gt;
Окончательный результат можно видеть на рис. 2.&lt;br /&gt;
&lt;br /&gt;
===В помощь математикам===&lt;br /&gt;
&lt;br /&gt;
Помимо рисования ломаных по набору заданных значений, мы можем строить графики различных математических функций. Создадим новый файл и добавим в него следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 1 &amp;lt;?&lt;br /&gt;
 2 include ( &amp;quot;./jpgraph/src/jpgraph.php&amp;quot;);&lt;br /&gt;
 3 include (&amp;quot;./jpgraph/src/jpgraph_line.php&amp;quot;);&lt;br /&gt;
 4 include (&amp;quot;./jpgraph/src/jpgraph_utils.inc.php&amp;quot;);&lt;br /&gt;
 5 $f = new FuncGenerator(‘cos($x)+1.5*cos(2*$x)’);&lt;br /&gt;
 6 list($datax,$datay) = $f-&amp;gt;E(0,10);&lt;br /&gt;
 7 $tickPositions = array();&lt;br /&gt;
 8 $tickLabels = array();&lt;br /&gt;
 9 $tickPositions[0] = 0;&lt;br /&gt;
 10 $tickLabels[0] = ‘0’;&lt;br /&gt;
 11 for($i=1; $i/2*M_PI &amp;lt; 11 ; ++$i ) {&lt;br /&gt;
 12 $tickPositions[$i] = $i/2*M_PI;&lt;br /&gt;
 13     if( $i % 2 ) $tickLabels[$i] = $i.’/2’.SymChar::Get(‘pi’);&lt;br /&gt;
 14     else $tickLabels[$i] = ($i/2).SymChar::Get(‘pi’);&lt;br /&gt;
 15 }&lt;br /&gt;
 16 $n = count($datax);&lt;br /&gt;
 17 $xmin = $datax[0];&lt;br /&gt;
 18 $xmax = $datax[$n-1];&lt;br /&gt;
 19 $graph = new Graph(650, 450);&lt;br /&gt;
 20 $graph-&amp;gt;SetScale(‘linlin’,0,0,$xmin,$xmax);&lt;br /&gt;
 21 $graph-&amp;gt;title-&amp;gt;Set(‘cos(x)+1.5*cos(2*x)’);&lt;br /&gt;
 22 $graph-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL,12);&lt;br /&gt;
 23 $graph-&amp;gt;xaxis-&amp;gt;SetPos(‘min’);&lt;br /&gt;
 24 $graph-&amp;gt;xaxis-&amp;gt;SetMajTickPositions($tickPositions,$tickLabels);&lt;br /&gt;
 25 $graph-&amp;gt;xaxis-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL,10);&lt;br /&gt;
 26 $graph-&amp;gt;yaxis-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL,10);&lt;br /&gt;
 27 $graph-&amp;gt;xgrid-&amp;gt;Show();&lt;br /&gt;
 28 $p1 = new LinePlot($datay,$datax);&lt;br /&gt;
 29 $p1-&amp;gt;SetColor(‘teal’);&lt;br /&gt;
 30 $graph-&amp;gt;Add($p1);&lt;br /&gt;
 31 $graph-&amp;gt;Stroke();&lt;br /&gt;
 32 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберемся, что происходит в этих строках. В первую очередь, мы подключаем библиотеку '''jpgraph_utils.inc.php''', которая содержит вспомогательные утилиты, в том числе и класс генерации данных для функций (нормальных и параметрических), и уже в '''5'''-й строке создаем объект этого класса. Обратите внимание, что самая функция представлена строкой, содержащей ''PHP''-конструкцию с переменной '''$x''': это необходимо для безопасности вашего приложения. В строке '''6''' мы вычисляем значения функции в виде пар ('''x,y=f(x)''') на некотором множестве точек в диапазоне от 0 до 10.&lt;br /&gt;
&lt;br /&gt;
Со строки '''7''' по '''15''' мы создаем разметку. Особое внимание тут стоит уделить конструкции '''SymChar::Get(‘pi’)''' – вызов статической функции '''Get''' класса '''SymChar''', которая возвращает символы греческого алфавита, в нашем случае это «пи». В строке '''24''' вызывается метод '''SetMajTickPositions()''', который расставляет наши метки (разметку) в соответствии с вычисленными позициями.&lt;br /&gt;
&lt;br /&gt;
Вернувшись чуть-чуть назад, обратим внимание на строку '''20''', где в качестве первого параметра метода '''SetScale()''' используется не '''‘textlin’''', а '''‘linlin’'''. Вообще, первый параметр отвечает сразу за две величины, а именно, за масштабируемость по осям '''x''' и '''y'''. Соответственно, в случае с '''textlin''' по '''x''' было текстовое масштабирование, а по '''y''' – линейное. В случае '''linlin''' они оба линейны, что лучше подходит для математических графиков. Помимо изменения первого параметра добавилось еще четыре, отвечающих за минимальные и максимальные значения по '''x''' и по '''y'''.&lt;br /&gt;
&lt;br /&gt;
В строках '''22, 25''' и '''26''' мы задаем шрифты. Единственным заметным новшеством здесь является явное указание размера: '''12, 10''' и '''10'''. Все остальные параметры и функции мы рассмотрели в примерах выше, так что теперь самое время смотреть результаты (рис. 3).&lt;br /&gt;
&lt;br /&gt;
===Гистограммы===&lt;br /&gt;
&lt;br /&gt;
Графики готовы – они наглядны и несут необходимую информацию, но останавливаться на достигнутом мы не будем. Дадим себе и посетителям больше информации о сайте, создав гистограмму посещений в зависимости от времени суток.&lt;br /&gt;
&lt;br /&gt;
Модуль построения гистограмм находится в файле '''jpgraph_bar.php'''; добавим в наш скрипт эту библиотеку:&lt;br /&gt;
&lt;br /&gt;
 include (&amp;quot;./jpgraph/src/jpgraph_bar.php&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Работа с гистограммами во многом похожа на работу с графиками: здесь также нужен массив исходных данных, названия и шрифты, но есть и некоторые тонкости. Создадим новое изображение с гистограммой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 1 include ( &amp;quot;./jpgraph/src/jpgraph.php&amp;quot;);&lt;br /&gt;
 2 include (&amp;quot;./jpgraph/src/jpgraph_bar.php&amp;quot;);&lt;br /&gt;
 3 $visits = array(120, 343, 681, 2354, 1890, 511);&lt;br /&gt;
 4 $graph = new Graph(650, 450);&lt;br /&gt;
 5 $graph-&amp;gt;SetScale(&amp;quot;textlin&amp;quot;);&lt;br /&gt;
 6 $graph-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 7 $graph-&amp;gt;title-&amp;gt;Set(‘Посещаемость сайта в течение суток’);&lt;br /&gt;
 8 $bplot = new BarPlot($visits);&lt;br /&gt;
 9 $graph-&amp;gt;Add($bplot);&lt;br /&gt;
 10 $graph-&amp;gt;Stroke();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное отличие этого кода от виденного нами ранее кроется в строке '''8''': мы используем класс '''BarPlot''' вместо '''LinePlot'''. Из полученной гистограммы мы вряд ли извлечем какие-либо полезные данные, ведь нет ни подписей, ни легенды. По традиции, усовершенствуем ее, и начнем с установки ширины столбцов:&lt;br /&gt;
&lt;br /&gt;
 $bplot-&amp;gt;SetWidth(0.9);&lt;br /&gt;
&lt;br /&gt;
Максимально возможное значение – 1.0, мы берем чуть меньше (0.9). Теперь добавим в центры столбцов значения посещаемости:&lt;br /&gt;
&lt;br /&gt;
 $bplot-&amp;gt;value-&amp;gt;Show();&lt;br /&gt;
 $bplot-&amp;gt;value-&amp;gt;SetFormat(‘%d’);&lt;br /&gt;
 $bplot-&amp;gt;value-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 $bplot-&amp;gt;SetValuePos(‘center’);&lt;br /&gt;
&lt;br /&gt;
Если убрать нижние три строчки, то значения будут отображаться над столбцами, причем у самого высокого столбца цифры будут выходить за пределы области построения диаграммы. Чтобы избежать этого, можно добавить следующую строку:&lt;br /&gt;
&lt;br /&gt;
 $graph-&amp;gt;yaxis-&amp;gt;scale-&amp;gt;SetGrace(4);&lt;br /&gt;
&lt;br /&gt;
Теперь украсим диаграмму финальными штрихами (рис. 4):&lt;br /&gt;
&lt;br /&gt;
 $bplot-&amp;gt;SetShadow();&lt;br /&gt;
 $times = array(&amp;quot;0-4&amp;quot;,&amp;quot;4-8&amp;quot;,&amp;quot;8-12&amp;quot;,&amp;quot;12-16&amp;quot;,&amp;quot;16-20&amp;quot;,&amp;quot;20-24&amp;quot;);&lt;br /&gt;
 $graph-&amp;gt;xaxis-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 $graph-&amp;gt;xaxis-&amp;gt;SetTickLabels($times);&lt;br /&gt;
 $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 $graph-&amp;gt;xaxis-&amp;gt;title-&amp;gt;Set(&amp;quot;Время&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Первая строка придает столбцам объем, а с остальными мы уже знакомы.&lt;br /&gt;
&lt;br /&gt;
Очень часто значения посещаемости на выходных отличаются от показателей в будние дни, когда люди находятся на работе: здесь нам пригодятся сгруппированные гистограммы. Подготовим вторую гистограмму, имитирующую посещаемость нашего вымышленного сайта в нерабочее время:&lt;br /&gt;
&lt;br /&gt;
 $visits2 = array(183, 225, 454, 2123, 2456, 1345);&lt;br /&gt;
 $bplot2 = new BarPlot($visits2);&lt;br /&gt;
 $bplot2-&amp;gt;value-&amp;gt;Show();&lt;br /&gt;
 $bplot2-&amp;gt;value-&amp;gt;SetFormat(‘%d’);&lt;br /&gt;
 $bplot2-&amp;gt;value-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 $bplot2-&amp;gt;SetValuePos(‘center’);&lt;br /&gt;
 $bplot2-&amp;gt;SetFillColor(&amp;quot;orange&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Она аналогична первой, но имеет другие значения столбцов и оранжевый цвет. Теперь создадим объект группированных гистограмм и добавим его в изображение:&lt;br /&gt;
&lt;br /&gt;
 $gbplot = new GroupBarPlot(array($bplot,$bplot2));&lt;br /&gt;
 $graph-&amp;gt;Add($gbplot);&lt;br /&gt;
&lt;br /&gt;
Не забудьте закомментировать строку&lt;br /&gt;
&lt;br /&gt;
 $graph-&amp;gt;Add($bplot);&lt;br /&gt;
&lt;br /&gt;
которая добавляла «отдельно стоящую» гистограмму. Наконец, изменим угол наклона надписей и добавим легенду:&lt;br /&gt;
&lt;br /&gt;
 $bplot-&amp;gt;value-&amp;gt;SetAngle(90);&lt;br /&gt;
 $bplot2-&amp;gt;value-&amp;gt;SetAngle(90);&lt;br /&gt;
 $bplot-&amp;gt;SetLegend(&amp;quot;Будние дни&amp;quot;);&lt;br /&gt;
 $bplot2-&amp;gt;SetLegend(&amp;quot;Выходные&amp;quot;);&lt;br /&gt;
 $graph-&amp;gt;legend-&amp;gt;SetFont(FF_VERDANA,FS_NORMAL);&lt;br /&gt;
 $graph-&amp;gt;img-&amp;gt;SetMargin(80,130,30,80);&lt;br /&gt;
&lt;br /&gt;
===Антиспаммер===&lt;br /&gt;
&lt;br /&gt;
В мире развелось слишком много спамеров, флудеров и просто «хороших людей», к тому же многие из них – это программы. Одним из способов защиты от таких «гостей» является ввод пользователем секретного кода с картинки, отображаемой на сайте (так называемой «captcha»). Программе тяжело распознавать нестандартные кривые символы, а человеку это под силу, и, как вы уже догадались, в ''JpGraph'' есть возможность создавать их. Чтобы объяснить, как это работает, достаточно пяти строк:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 1 require_once &amp;quot;./jpgraph/src/jpgraph_antispam.php&amp;quot;;&lt;br /&gt;
 2 $spam = new AntiSpam();&lt;br /&gt;
 3 $chars = $spam-&amp;gt;Rand(5);&lt;br /&gt;
 4 $spam-&amp;gt;Set($chars);&lt;br /&gt;
 5 $spam-&amp;gt;Stroke();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке мы по обыкновению подключаем дополнительный модуль. Обратите внимание, что ядро библиотеки здесь не требуется. Затем создаем объект '''AntiSpam''', а в строке '''3''' генерируем пять символов. Далее вставляем их в изображение и выводим. Все максимально просто и эффективно. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
===Дополнительные возможности===&lt;br /&gt;
&lt;br /&gt;
Если вам по-прежнему кажется, что вашим графикам чего-то недостает, обратите внимание на следующие функции:&lt;br /&gt;
&lt;br /&gt;
* '''Ступенчатое отображение'''&lt;br /&gt;
*: В данном режиме точки соединяются двумя отрезками (горизонтальным и вертикальным), в результате чего график получается ступенчатым. Чтобы активировать его, нужно вызвать метод '''SetStepStyle():'''&lt;br /&gt;
      $lineplot-&amp;gt;SetStepStyle();&lt;br /&gt;
&lt;br /&gt;
* '''Заливка'''&lt;br /&gt;
*: Для заливки области, расположенной под графиком, предназначен метод '''SetFillColor()'''.&lt;br /&gt;
      $lineplot2-&amp;gt;SetFillColor(‘red’);&lt;br /&gt;
&lt;br /&gt;
*: При этом важно следить за порядком: если некий график находится выше других, но построен последним, его заливка автоматически перекроет все другие графики.  Двигайтесь сверху вниз.&lt;br /&gt;
&lt;br /&gt;
* '''Свои изображения'''&lt;br /&gt;
*: На первом графике мы отмечали точки с помощью квадратиков, но если вы считаете, что этого недостаточно, то с помощью метода SetTYPE() можно установить собственный маркер:&lt;br /&gt;
     $lineplot2-&amp;gt;mark-&amp;gt;SetTYPE(MARK_IMG, &amp;quot;image.jpg&amp;quot;, 1.5);&lt;br /&gt;
*: Первый параметр сообщает, что мы будем использовать изображение, второй задает его местоположение, а третий отвечает за масштаб. Можно использовать и одно из встроенных изображений, например:&lt;br /&gt;
      $lineplot2-&amp;gt;mark-&amp;gt;SetTYPE(MARK_IMG_BALL,’red’,1.0);&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>