Столбчатая диаграмма
В этом разделе вы:
-
Интегрируете график с несколькими сериями данных
-
Добавите элементы
title,tooltip,legend -
Привяжите данные через Data Container
Настройка графика с несколькими сериями
В этом разделе вы создадите график, сочетающий в себе bar серию для представления зарплат сотрудников и line серию для отображения общих метрик.
Настройка серий графика
Откройте user-list-view.xml в редакторе Studio и выберите элемент formLayout, где будет расположена ваша диаграмма.
Чтобы добавить элемент chart, выберите Add Component на панели действий и выберите элемент Charts.
Studio автоматически добавит пространство имен charts в корневой элемент экрана, если его там еще нет:
<view xmlns="http://jmix.io/schema/flowui/view"
xmlns:charts="http://jmix.io/schema/charts/ui" />
Кроме того, элемент <charts:chart/> добавится в formLayout. Настройте атрибуты id, height и width следующим образом:
<charts:chart id="bar" width="40em" height="100%" minHeight="30em" alignSelf="STRETCH">
Чтобы выбрать тип графика, вам нужен атрибут series.
Выберите элемент chart в панели структуры Jmix UI или в XML, затем нажмите кнопку Add на панели инспектора. Выберите Series → Bar из выпадающего списка.
Чтобы включить line серию в ваш график, выберите элемент series и выберите Add → Line. Добавьте свойство name для обоих типов графиков со значениями Salary и AssesmentTotal соответственно.
<charts:series>
<charts:bar name="Salary"/>
<charts:line name="Assessment Total"/>
</charts:series>
Добавление осей
Графики bar, scatter, line требуют наличия элементов yAxes и xAxes для отображения значений графика.
Чтобы добавить ось X, щелкните по элементу графика и выберите Add → XAxes → XAxis. Ось X вашего графика будет отображать имена сотрудников.
<charts:xAxes>
<charts:xAxis/>
</charts:xAxes>
Поскольку график содержит два разных типа данных с разными масштабами, вам нужно настроить две оси Y.
Чтобы настроить первую ось Y для отображения зарплат сотрудников, щелкните по элементу chart и выберите Add → YAxes → YAxis.
Добавьте атрибут name="Salary" в элемент YAxis, настройте позицию и выравнивание.
Значения зарплаты в базе данных кратны 100 000. Чтобы отобразить эти значения в масштабе, уменьшенном до сотен, добавьте элемент axisLabel под YAxis и установите атрибут formatterFunction следующим образом.
<charts:yAxis name="Salary" position="LEFT" alignTicks="true">
<charts:axisLabel
formatterFunction="function(value){return value / 100;}"/>
</charts:yAxis>
Атрибут formatterFunction определяет JavaScript-функцию для корректировки формата значений меток на оси.
В приведенном выше примере функция делит входящее value на 1000, чтобы скорректировать масштаб с сотен тысяч до сотен.
Чтобы добавить вторую ось Y, выберите элемент YAxes и выберите Add → YAxis, настройте имя оси, позицию и выравнивание делений.
<charts:yAxis name="Assessment Total" position="RIGHT" alignTicks="true"/>
Затем сопоставьте каждую ось Y с соответствующей серией, добавив атрибуты yAxisIndex в серии bar и line соответственно, как показано ниже.
<charts:series>
<charts:bar name="Salary" yAxisIndex="0"/>
<charts:line name="Assessment Total" yAxisIndex="1"/>
</charts:series>
Добавление cвойств графика
Теперь вы добавите свойства title, tooltip и legend к вашему графику.
Заголовок
По умолчанию текст title появляется в верхней части графика. Чтобы добавить заголовок, выберите элемент chart, затем выберите Add → Title на панели инспектора. Настройте атрибут text, чтобы описать, что представляет собой график, например, Salary & Assessment Total.
<charts:title text="Salary & Assessment Total"/>
Всплывающая подсказка
Атрибут tooltip показывает детальную информацию, когда пользователи наводят курсор на разные части графика. Чтобы добавить атрибут tooltip, выберите элемент chart, затем выберите Add → Tooltip. Установите атрибут trigger в значение AXIS, чтобы показывать всплывающие подсказки для всех элементов в той же категории.
<charts:tooltip trigger="AXIS">
<charts:axisPointer type="SHADOW"/>
</charts:tooltip>
Привязка данных с использованием Data Container
Сначала необходимо загрузить всех пользователей, кроме Admin.
Создайте новый collectionContainer под элементом data с именем employeesDc и соответствующим JPQL-запросом:
<collection id="employeesDc"
class="com.company.onboarding.entity.User">
<fetchPlan extends="_base">
<property name="department" fetchPlan="_base"/>
</fetchPlan>
<loader id="employeesDl" readOnly="true">
<query>
<![CDATA[select e from User e where e.username <> 'admin']]>
</query>
</loader>
</collection>
Чтобы включить загруженные данные в график, выберите элемент chart и вручную добавьте атрибут dataSet.
<charts:dataSet/>
Внутри элемента dataSet выберите контейнер employeesDc в качестве source и настройте categoryField как ось X, а valueFields как оси Y следующим образом.
<charts:dataSet>
<charts:source dataContainer="employeesDc"
categoryField="username" valueFields="salary assessmentTotal"/>
</charts:dataSet>
XML конфигурация для столбчатой диаграммы будет выглядеть следующим образом:
<charts:chart id="bar" width="40em" height="100%" minHeight="30em" alignSelf="STRETCH">
<charts:title text="Salary & Assessment Total"/>
<charts:tooltip trigger="AXIS">
<charts:axisPointer type="SHADOW"/>
</charts:tooltip>
<charts:legend/>
<charts:dataSet>
<charts:source dataContainer="employeesDc"
categoryField="username" valueFields="salary assessmentTotal"/>
</charts:dataSet>
<charts:xAxes>
<charts:xAxis/>
</charts:xAxes>
<charts:yAxes>
<charts:yAxis name="Salary" position="LEFT" alignTicks="true">
<charts:axisLabel
formatterFunction="function(value){return value / 100;}"/>
</charts:yAxis>
<charts:yAxis name="Assessment Total" position="RIGHT" alignTicks="true"/>
</charts:yAxes>
<!-- Add yAxisIndex for each series to bind yAxis to their corresponding data -->
<charts:series>
<charts:bar name="Salary" yAxisIndex="0"/>
<charts:line name="Assessment Total" yAxisIndex="1"/>
</charts:series>
</charts:chart>
Этот график предоставляет визуализацию зарплат сотрудников и их метрик.