Top-office11.ru

IT и мир ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java построение графика функции

Устанавливаем SceneBuilder

В отличие от Swing где можно править код прямо в среде. Для JavaFX надо установить отдельное приложение где можно будет редактировать интерфейс.

Для этого идем сюда https://gluonhq.com/products/scene-builder/#download и скачиваем версию под свою систему.

Там кстати версии под разные java, желательно выбрать соответствующую вашей. Например, у нас в компьютерном классе всюду java 8, следовательно выбираем SceneBuidler под 8 версию.

устанавливаем, кстати 8 версия не требует админских прав, и можно ее ставить прямо на своих компах в компьютерных классах. Кстати у меня вроде дома как 11 джава, но использую я SceneBuilder 8, так что в принципе особого влияния я не заметил. В общем ставим:

по завершению установки SceneBuilder запустится

но он нам пока не нужен, так что можно его закрыть.

Создаем JavaFX приложение

Делаем новый проект типа JavaFX

назову его ExperimentCharts

получаем такую структуру проекта:

Принцип организации javafx интерфейса

Кликнем дважды на файлик sample.fxml чтобы открыть его и увидим там что-то такое:

fxml – это такой аналог java кода для разметки, как видите тут тоже есть всякие импорты. И есть тэги, определяющие что будет отображаться. В настоящий момент тут имеется один тэг GridPane, которые используется для выравнивания разных объектов по сетке.

Так как пока выравнивать нечего он используется тут своего рода в холостую.

Особо стоит обратить внимание на атрибут fx:controller в нем указан класс вместе с полным путем, в котором мы будем писать код для интерфейса.

Давайте теперь запустим приложение. Откроется такое окно:

на самом деле код, как и в любом другом приложении запустился из файла Main. Который выглядит так

Добавляем кнопку

Вернемся к файлу sample.fxml. Теперь запустим SceneBuidler, выбираем Open Project

и открываем наш файлик. Увидим что-то такое

Перетянем теперь кнопку на форму. Так как пока у нас пустой GridPane наша форма выглядит как пустота. Но тянуть можно:

Сохраним перетянутое Ctrl+S и переключимся обратно в Idea. И глянем что у нас выросло с файлике sample.fxml. Там у нас будет такое:

Тут видно, что выросла наша кнопка. И еще всякие Constraints появились, но на них можно не обращать внимание.

Добавляем реакцию на нажатие

Теперь нам надо добавить реакцию на нажатие кнопки. Переключимся на файл Controller.java, там у нас пока пустота

Этот файл уже привязан к нашему sample.fxml, через атрибут fx:controller=”sample.Controller”. Поэтому мы можем сделать тут какую-нибудь функцию и привязать ее к кнопке.

Добавим функцию, которая выводит сообщение в консоль

запустим теперь приложение и кликнем на кнопку.

очевидно ничего не произойдет. Оно и понятно, ведь мы кнопке функцию не привязали.

Переключимся на SceneBuilder и привяжем кнопку к функции

не забудем сохранить, и запустим проект по-новому

Ура, реакция привязалась.

Читаем значение из текстового поля

Умение добавить реакцию это конечно важно, но не менее важно уметь считать значение из другого поля. Для этого мы будем использовать так называемые декораторы.

Я хочу добавить поле для ввода текста, и чтобы по нажатию на кнопку выводилось содержимое этого поля.

Прежде чем добавить элемент в SceneBuilder я создам в классе поле через которое образуется связь

теперь переключимся на SceneBuilder и добавим txtField, плюс привяжем его к нашему классу, делается это путем указания свойства fx:id:

если по какой-то причине у вас в этом поле ничего не высветилось, то можете смело вписать туда вручную txtInput.

Сохраним то что наделали в SceneBuilder и вернемся обратно в Idea. Если глянуть в файлик fxml то увидим

теперь вернемся в наш Controller и подправим метод showMessage:

В принципе вот и вся наука. Добавил поле в контроллер, добавил объект в SceneBuilder. Связал через fx:id, либо связал с методом. Можно теперь пилить что-нибудь посложнее.

Создаем приложение с графиками

Я хочу сделать приложение, которое позволит выводить графики зависимости одних значений эксперимента от других. Например, как увеличение количество продуктов в автомате влияет на количество посетителей, или на количество проданных напитков или еды.

В общем, идем в SceneBuilder и добавляем компоненты.

Мне не очень нравится GridPane так что я хочу заменить его на комбинацию HBox и VBox. Это контейнеры, которые позволяют выводить компоненты в виде строки либо в виде колонки. Комбинируя их можно получить больше свободы чем дает тот же GridPane.

Удаляем кнопки и поля для ввода

так как у формы может быть только один главный контейнер поэтому если мы хотим заменить GridPane на VBox, надо обернуть GridPane в VBox, делается это так:

а затем удаляем GridPane, получим в результате такое:

добавляем Label и ComboBox

кликаем дважды на Label чтобы переименовать его и пишем в нем Y

теперь добавляем график:

Отлично, теперь все сохраняем. И идем в IDEA.

Подключаем интерфейс к коду

Для начала, можно сразу заглянуть в sample.fxml, там будет такое:

сразу обратим на AreaChart

тут видим, что определены две оси. По X и по Y.

  • CategoryAxis – означает что в качестве координат оси X будут использоваться строки.
  • NumberAxis – ясно море, числовая ось.

Так как я собираюсь выводить зависимость одного числа от другого. То я поменяю CategoryAxis на NumberAxis.

Да-да, править разметку можно прямо в файле fxml. Часто, это весьма удобно.

переключаемся в наш Controller, и создаем поля чтобы привязать компоненты на форме к коду.

идем в sample.fxml и там указывем fx:id прямо в коде разметки, вот так

Заполняем ComboBox

По X я буду выводить количество продуктов, а для Y хочу давать возможность выбирать рассчитанный коэффициент из эксперимента.

Соответственно это самый ComboBox, он же выпадающий список надо заполнить возможными значениями.

Для этого в JavaFX предусмотрен интерфейс Initializable, который позволяет определить метод, который будет запускаться при инициализации формы. Делается это так:

Читать еще:  Ошибка цифровой подписи

правим метод initialize

запускаем main и тыкаем в выпадающий список, он должен быть заполнен

Пробуем вывести график

Для начала не будем сразу выводить данные из файла. Попробуем просто что-нибудь вывести. Сделаем это в методе initialize, чтобы сразу по запуску программы у нас рисовался график.

И так, правим метод initialize

Класс! Кстати там внизу ось подписана нулем, это можно поменять на что-то более осознанное

Подключаем данные экспериментов

Берем файлик с экспериментами из прошлой программы, и копируем себе в корень проекта

вообще, для тестовых целей рекомендую сделать файлик с не очень большим количеством данных, а то будет подтормаживать.

Теперь берем класс эксперимента их прошлой программы и тоже копируем себе.

Важно, чтобы путь к файлу Experiment.java совпадал с путем в исходном проекте, то есть вот так:

так как нас по сути интересуют только данные, можно удалить метод run чтобы не было всяких красных названий, типа

в итоге останется примерно такой класс:

чего вполне достаточно для построения графиков.

Выводим данные на графике

Сделаем так, чтобы данные с графика подкачались в момент загрузки формы, для этого подправим метод initialize

теперь если запустить программу ничего не выведется.

кстати вы возможно заметили, что размер открываемой формы не соответствует размеру формы в SceneBuilder, это потому что в классе main мы явно указываем размеры, давай их уберем:

а если вас раздражает что label с “X” уж как-то сильно зажат в левом верхнем углу, то можете добавить отступы:

не забываем сохранить (Ctrl+S)

Теперь если запустить будет хорошо:

Добавляем реакцию на выбор в ComboBox

Я хочу, чтобы, переключая опцию в выпадающем списке, у меня перерисовывался график. То есть по сути формировался новый набор данных и передавался графику на отрисовку.

Добавим метод в класс Controller, назовем его updateChart:

привяжем теперь этот метод к реакции на изменение значения в выпадающем списке:

сохраняем (Ctrl+S) и запускаем приложение

как видно теперь при выборе выпадающего списка график начинает отображаться. Но если менять разные значения, то график меняет цвет, но рисуется все время одним и тем же.

Оно и понятно, это потому что мы в нашем методе updateChart ни учитываем выбранное значение.

Доработаем наш код.

Сначала я вынесу все названия пунктов в отдельные переменные, мне это пригодится, когда я буду сравнивать значения выбранных пунктов.

теперь подправим метод updateChart, будем смотреть какой пункт меню выбран и в зависимости от него строить выбранную зависимость:

запускаем и проверяем:

Добавляем кластерную гистограмму

Добавим теперь новый график, который будет показывать, как часто встречается то или иное значение. Причем объединит их в группы.

Например, если по ходу эксперимента количество продуктов варьировалось от 10 до 510, то мы сделаем пять групп:

и соответственно получим график на которой будет видно, как много экспериментов попало в ту или иную группу

Правим код Controller

привязываем его к Controller:

не забываем сохранится, и правим метод updateBarChart

хм, а черт! Мы ж забыли вызывать метод updateBarChart, чтобы график рисовался. Добавим вызов его в initialize:

Построение графиков функций на основе визуального интерфейса апплетов Java

Дата добавления: 2015-06-12 ; просмотров: 4767 ; Нарушение авторских прав

Цель лабораторной работы: научиться строить графики функций, используя стандартные средства, предоставляемые библиотекой awt Java.

Попробуем научиться строить графики, используя апплеты Java. Сразу нужно оговориться, что существует множество платных и бесплатных библиотек, реализующих различные приемы построения графиков. Например, такая известная вещь, как jfreechart. Но наша задача – разобраться с принципами построения графиков с использованием стандартного инструментария.

Для рисования графика необходимо решить, где он будет в принципе располагаться. Не будем усложнять задачу и нарисуем наш график непосредственно на «поверхности» основного окна апплета. Для этого используем класса Graphics. При запуске апплета используем метод paint непосредственно для рисования графика. Наш начальный код будет выглядеть примерно так:

import java.applet.*;

import java.awt.*;

public class MyApplet extends Applet <

public void paint(Graphics g)

Этот код создаст пустое окно апплета. Теперь нужно нарисовать график. Сперва надо вспомнить принципы рисования на экране, которые в общих чертах практически одинаковы для любого языка программирования. Верхняя левая точка экрана (в нашем случае – окна апплета) является нулем декартовой двумерной системы координат. Отрицательные точки по умолчанию на экране не отображаются (что естественно), положительное направление по x – вправо, по y – вниз (рис.7). Это несколько не совпадает с привычным видом декартовой системы координат.

Для начала нужно решить, какого размера будет наш графический апплет. Пусть размер будет 800 на 800 точек. Сразу же нарисуем оси координат. Пусть ось абсцисс находится посередине (координата y = 400), а ось ординат- на 10 точек от левого края экрана (координата x = 10). Для рисования линий используем метод drawLine. Аргументы метода – 4 координаты (x0, y0, x1, y1), задающие две точки. Соответственно, на контейнере будет нарисован отрезок, проходящий через две точки. Код, задающий размер контейнера-апплета и оси координат, будет выглядеть следующим образом:

this.setSize(800, 800);

g.drawLine(10, 0, 10, 800);

g.drawLine(0, 400, 800, 400);

Теперь перейдем непосредственно к рисованию графика. Пусть это будет график функции 350* cos (0.05*x). Для вызова математической функции используется класс Math. Поскольку он входит в стандартный пакет Java, то его не нужно подключать с помощью инструкции import. При вызове функции нужно внимательно смотреть на тип аргументов для нее и в случае необходимости приводить тип. Так, функция cos класса Math, как и большинство остальных функций, работают с аргументами типа double. Мы будем подставлять в качестве аргумента переменную цикла, однако она будет целочисленного типа (int). В этом случае нас выручает то, что мы умножаем аргумент на 0.05, что автоматически приведет результат к типу double. Однако рисовать график будем с помощью того же метода drawLine, а его аргументы должны быть целочисленными. Для этого придется приводить результат к типу int. Для перебора значений аргумента x организуем цикл с помощью инструкции for. Итак, код для построения собственно графика функции:

Читать еще:  Ошибка с0000022 при операции обновления

for (int i=1; i

График в реальном времени на Java

У меня есть приложение, которое обновляет переменную от 5 до 50 раз в секунду, и я ищу какой-то способ рисования непрерывного XY-графика этого изменения в режиме реального времени.

хотя JFreeChart не рекомендуется для такой высокой скорости обновления, многие пользователи по-прежнему говорят, что он работает для них. Я пробовал использовать этой demo и изменил его для отображения случайной величины, но, похоже, все время использует 100% использование процессора. Даже если я проигнорирую это, я не хочу быть ограничен классом пользовательского интерфейса JFreeChart для построения форм (хотя я не уверен, каковы его возможности). Можно ли интегрировать его с «формами» и раскрывающимися меню Java? (как доступны в VB) в противном случае, есть ли какие-либо альтернативы, которые я мог бы изучить?

EDIT: Я новичок в Swing, поэтому я собрал код, чтобы проверить функциональность JFreeChart с ним (избегая при этом использования класса ApplicationFrame JFree, так как я не уверен как это будет работать с комбо-боксами и кнопками Swing). Сейчас график будет немедленно обновлена и ЦП. Можно ли буферизировать значение с помощью new Millisecond () и обновлять его, возможно, дважды в секунду? Кроме того, могу ли я добавить другие компоненты к остальной части JFrame без нарушения JFreeChart? Как мне это сделать? рамка.getContentPane ().добавить (новая кнопка («Click»)), кажется, перезаписывает график.

8 ответов

Если ваша переменная обновляется так быстро, нет смысла обновлять диаграмму каждый раз.

вы думали о буферизации изменений переменных и обновлении диаграммы в другом потоке, скажем, каждые 5s ? Вы должны обнаружить, что JFreeChart может хорошо обрабатывать такие скорости обновления.

поскольку JFreeChart является обычной настольной библиотекой, вы можете легко интегрировать ее со стандартным приложением Swing. Или вы можете использовать его для диаграммы через веб-приложение (путем рендеринга к JPEG / PNG и т. д. JFreeChart также может автоматически создавать карты изображений, поэтому вы можете использовать mouseovers и т. д.)

согласно этому сообщению в блоге:

его можно реализовать «в режиме реального времени» отображения звуковых спектров с помощью библиотеки KJ DSP:

поэтому, если вы можете обойтись довольно простыми диаграммами, это может быть альтернативой JFreeChart.

Если данные обновляются чаще, чем вы можете создать диаграмму, то у вас должна быть задача в отдельном потоке, который восстанавливает диаграмму и запускает другую регенерацию, когда это будет сделано. Нет смысла запускать его чаще, чем это, но если он окажется слишком большой нагрузкой на процессор, вы можете задушить частоту, с которой он перезапускается. Если обновления не поступают, вы не запускаете повторную генерацию. Я сделал что-то подобное в моем проект Zocalo недавно. Он делает все, кроме дросселирования.

отвечал здесь. Ваша переменная изменяется до 50 раз в секунду, но в большинстве случаев вам не нужно будет обновлять каждый раз при внесении изменений. Вместо этого вы можете обновлять график через регулярные промежутки времени (например, каждые 100 мс).

Ну, я также использую JFreechart для высоких обновлений. Jfreechart обновляет до 10 до 15 кадров в секунду, но с использованием 100% процессора. Но если я хочу обновить ее на более высокой частоте он не будет обновляться. Если вы найдете любую библиотеку, которая может быть обновлена на abt 20 fps и может быть использована для разработки приложения на Java, пожалуйста, предложите мне также. Я видел много библиотек JFreeChart ответы но я не уверен, что кто-то может использоваться для обновлений примерно на 20 fps.

вы должны попробовать диаграммы из VisualVM (часть JDK). Вступление:http://java.dzone.com/news/real-time-charts-java-desktop

для того, чтобы получить ваш процессор намного ниже 100% и позволить вашему GUI оставаться отзывчивым, вы должны дросселировать скорость обновления диаграммы. Максимальная скорость обновления около 24 кадров в секунду имеет смысл для графика в реальном времени; любой быстрее более или менее неразличим в любом случае. Если ваши данные поступают быстрее, чем эта скорость, вам просто нужно буферизировать их в фоновом режиме и обновить диаграмму на переднем плане с требуемой скоростью обновления. В следующем примере я использую XChart вместе с SwingWorker фоновый поток. Захват данных моделируется со скоростью один на каждые 5 мс, а график обновляется со скоростью 24 кадров в секунду. Эта концепция должна работать с jfreecharts или любой другой библиотекой диаграмм, а также с небольшими изменениями. Отказ от ответственности: я ведущий разработчик XChart.

может быть, вы можете использовать два потока. Один для обновления вашего переменного приоритета ведьмы равен 10. И второй поток, который рисует так быстро, как приоритет posible witch равен 5.

Мне пришлось сделать то же самое в игре, которую я пишу.

Библиотека JFreeChart

Проект JFreeChart был основан в феврале 2000 года Дэвидом Гилбертом. Сегодня библиотека JFreeChart широко используется в Java приложениях для создания широкого спектра графиков. Используя JFreeChart можно создавать все основные типы 2D и 3D графики : круговые диаграммы, гистограммы, линейные и временные диаграммы. Библиотека позволяет создавать изображения нескольких форматов типа PNG, JPEG, SVG (Scalable Vector Graphics) и т.д.

JFreeChart обеспечена хорошо документированным API, поставляется с открытым исходным кодом и бесплатно. Это позволяет использовать ее в коммерческих целях без каких-либо дополнительных затрат. Документированное описание API можно найти на официальном сайте http://www.jfree.org/jfreechart/api/javadoc.

Дистрибутив JFreeChart

Дистрибутив библиотеки JFreeChart поставляется в виде zip файла и включает maven проект с документацией и демонстрационными примерами. Скачать последнюю версию библиотеки JFreeChart можно с официального сайта http://www.jfree.org/jfreechart/download.html.

Загрузка JFreeChart в maven репозиторий

Артефакт JFreeChart версии 1.0.19 можно найти в репозитории mvnrepository по следующим GAV параметрам :

Читать еще:  Java nio charset malformedinputexception

Чтобы загрузить библиотеку/артефакт в локальный репозиторий .m2/repository можно использовать плагин dependency с целью (goal) get следующим образом :

Примечание : в среде разработки Eclipse библиотеку JFreeChart можно установить как «User Library» и подключать к проектам.

Архитектура библиотеки JFreeChart

На следующем рисунке представлена схема взаимодействия различных классов библиотеки JFreeChart.

ОбъектОписание
FileФайл данных для формирования набора
DataBaseБаза данных для формирования набора
Create DatasetЧтение данных и создание объекта набора данных Dataset
General DatasetНабор данных для создания круговых (pie) диаграмм
Category DatasetЭтот тип набора данных используется для гистограммы, линейный график, и т.д.
Series DatasetОбъект хранения данных серии и для построения линейных диаграмм
Series Collection DatasetРазличные категории наборов данных серии формируют коллекцию серии данных. Этот тип набора данных используется для временных диаграмм
Create ChartМетод создания графического изображения
Frame/ImageПредставление графического изображения либо в Swing панеле JPanel, либо в виде файла изображения.

Подключение библиотеки JFreeChart к приложению

Архитектура прикладного уровня, представленная на следующем рисунке, объясняет, как библиотеку JFreeChart можно подключить к Java приложению.

Программа читает данные на основе которых с использованием JFreeChart API формирует требуемое изображение, которое можно будет либо отобразить в интерфейсе приложения (например Swing приложение), либо сформировать изображение типа JPEG или PNG.

Настройка диаграмм JFreeChart

Структура библиотеки JFreeChart создана таким образом, чтобы можно было статически и динамически настраивать общий вид диаграммы и графическое представление данных. Подробное описание свойств диаграммы JFreeChart представлено здесь. Примеры использования JFreeChart в сервлетах наглядно демонстрируют возможности изменения внешнего вида диаграммы изменением отдельных свойств.

Примеры построения диаграмм JFreeChart

Рассмотрим примеры создания 3-х графических изображений JFreeChart : круговая диаграмма (PieChartDemo.java), гистограмма (BarChartDemo.java) и временная диаграмма (TimeSeriesChartDemo.java). Для этого нам необходимо :

  1. Подготовить наборы данных для построения графиков.
  2. Создать графические объекты типа JFreeChart.
  3. Отобразить графические объекты JFreeChart на экране.

Наборы данных для построения графиков

Основой наборов данных для создания различных графических изображений типа круговых диаграмм и гистограмм является класс AbstractDataset. Данный класс является родителем DefaultPieDataset, используемый для формирования круговых диаграмм, и DefaultCategoryDataset для построения гистограмм. Для построения временной диаграммы используется набор данных TimeSeries и коллекция TimeSeriesCollection, реализующая интерфейс XYDataset.

Набор данных для круговой диаграммы

Метод createDataset формирует набор данных типа PieDataset для создания круговой диаграммы.

Метод определения значения setValue получает числовое значение value для ключа key, имеющего тип Comparable.

Набор данных для гистограммы

Метод createDataset формирует набор данных типа CategoryDataset для создания гистограммы.

Метод addValue получает в качестве параметров вещественное значение value для строки rowKey и колонки columnKey, имеющих тип Comparable.

Набор данных для графика

Метод createDataset формирует набор данных типа XYDataset для создания линейных XY графиков. Сначала создаются два объекта TimeSeries, которые подготавливают наборы данных. После этого воздаются коллекции TimeSeriesCollection, реализующие интерфейсы XYDataset, IntervalXYDataset, XYDomainInfo, XYRangeInfo.

Создание изображений графических объектов JFreeChart

Для построения различных графиков JFreeChart (гистограммы, круговые диаграммы, линейные графики) используется ChartFactory, содержащий большое количество статических перегруженных методов.

Графическое изображение круговой диаграммы

Для создания круговой диаграммы используем метод createPieChart, которому в качестве параметров передаем наименование заголовка, набор данных, флаги создания легенды, всплывающей подсказки и отображения URL. После этого определяем фон графика, выравнивание, цвет и шрифт заголовка и подзаголовка. При настройке plot’a. определяем цвет и наименования секций, шрифт меток секций.

Подробное описание с примерами настройки интерфейса круговых диаграмм представлено здесь.

Графическое изображение гистограммы

Для создания гистограммы используется метод createBarChart, которому в качестве параметров передаются наименование заголовка, наименование вертикальной оси и набор данных. После этого определяется подзаголовок, фон графика и настраивается plot.

Описание с примерами настройки интерфейса гистограмм представлено здесь.

Временные диаграммы

Для создания временных диаграмм используется метод createTimeSeriesChart, которому в качестве параметров передаются наименования заголовка, осей абсцисс и ординат, набор данных и флаги представления легенды, отображения всплывающей подсказки, отображения адреса URL. Графики будут отображаться на белом фоне. После этого определяются параметры plot’а типа XYPlot.

Временная шкала (ось абсцисс) будет иметь метки в формате «mm.yyyy». Формат временных меток может быть изменен.

Описание с примерами создания и настройки временных диаграмм, а также нанесений аннотаций и маркеров на графики, представлено здесь.

Отображение графических объектов в интерфейсе

Для отображения графических объектов в интерфейсе Swing-приложений создаем объект ChartPanel.

Графические изображения в интерфейсе

Панель представления графических объектов ChartPanel

ChartPanel наследует (extends) свойства Swing GUI класса JPanel и предназначена для отображения графических объектов JFreeChart. Класс содержит несколько конструкторов, которые в качестве основного параметра получают объект JFreeChart.

Создаваемое графическое изображение отображается на панели и автоматически перерисовывается при получении соответствующих уведомлений.

Значения по умолчанию

DEFAULT_BUFFER_USED = trueиспользование буфера для увеличения производительности
DEFAULT_W >

размер панели по горизонтали
DEFAULT_HEIGHT = 420размер панели по вертикали
DEFAULT_MINIMUM_DRAW_W >

минимальное значение по горизонтали, ниже которого качество масштабирование графика падает;
DEFAULT_MINIMUM_DRAW_HEIGHT = 200минимальное значение по вертикали, ниже которого качество масштабирование графика падает;
DEFAULT_MAXIMUM_DRAW_W >

максимальное значение по горизонтали, выше которого качество масштабирование графика падает;
DEFAULT_MAXIMUM_DRAW_HEIGHT = 768максимальное значение по вертикали, выше которого качество масштабирование графика падает;

Методы ChartFactory для создания графических объектов JFreeChart

Для создания круговых диаграмм ChartFactory содержит следующие перегруженные методы :

Для создания гистограмм ChartFactory включает следующие методы :

ChartFactory содержит два перегруженных метода создания линейых временных графиков :

В качестве параметров эти методы получают заголовок, наименования временной горизонтальной оси timeAxisLabel и оси значений valueAxisLabel, набор данных типа XYDataset. Второму методу дополнительно необходимо передать флаги отображения легенды, всплывающей подсказки значений на графике и отображения строки URL.

С примерами построения линейных диаграмм можно познакомиться здесь.

Скачать примеры

Исходные коды рассмотренных примеров создания различных графических изображений в виде maven-проекта можно скачать здесь (23.8 Кб).

Ссылка на основную публикацию
Adblock
detector
×
×