Круговая диаграмма
В этом разделе вы:
-
Создадите круговую диаграмму
-
Добавите атрибут
formatter
-
Привяжите данные через Data Provider
Настройка круговой диаграммы
Круговая диаграмма будет отображать распределение пользователей по различным статусам адаптации.
Щелкните по элементу formLayout
в user-list-view.xml
.
Затем выберите Add Component на панели действий, найдите и выберите элемент Chart. Настройте атрибуты id
, height
и width
следующим образом.
<charts:chart id="pie" width="40em" height="80%" minHeight="30em" alignSelf="STRETCH">
Чтобы включить pie
серию в ваш график, выберите элемент chart
и выберите Add → Series → Pie. Добавьте атрибут name
со значением Onboarding Status
и атрибут radius
, чтобы настроить размер вашего пирога следующим образом.
<charts:pie name="Onboarding Status" radius="50% 80%">
Форматирование значений
Атрибут formatter в серии круговой диаграммы поддерживает строковые шаблоны и функции обратного вызова для форматирования данных.
Чтобы отобразить статус адаптации и процент пользователей в этом статусе в каждом сегменте круговой диаграммы, выберите элемент label
, затем выберите Add → Label.
Установите атрибут formatter
элемента label
в "{b} : %{d}"
, где:
-
{b}
: Представляет имя элемента данных (категория) - в этом контексте это статус адаптации, например, "Not Started", "In Progress", или "Completed". -
{d}
: Представляет процент от общего количества, который составляет этот элемент данных (категория).
<charts:series>
<charts:pie name="Onboarding Status" radius="50% 80%">
<charts:label formatter="{b} : {d}%"/>
</charts:pie>
</charts:series>
Привязка данных с использованием Data Provider
Круговая диаграмма должна отображать статусы адаптации в процентах. Данные не поступают напрямую из одного атрибута сущности и требуют агрегации на основе статусов пользователей. Поэтому вам понадобится Data Provider, чтобы передать агрегированные данные в DataSet
в контроллере.
Перейдите в класс контроллера, и инжектируйте компонент круговой диаграммы для программного взаимодействия с компонентом диаграммы.
@ViewComponent
protected Chart pie;
Чтобы обработать данные при инициализации экрана, создайте обработчик InitEvent
.
В методе onInit()
вы получите количество пользователей в соответствии с их статусом адаптации и передадите эту информацию в класс DataSet
.
Используйте DataManager
для загрузки общего количества пользователей в каждой категории статуса адаптации следующим образом:
final Integer notStarted = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.NOT_STARTED)
.one();
final Integer inProgress = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.IN_PROGRESS)
.one();
final Integer completed = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.COMPLETED)
.one();
Затем создайте ListChartItems
для хранения данных диаграммы. Создайте экземпляры MapDataItem
для каждого статуса адаптации, сопоставляя имя статуса с его количеством.
Привяжите подготовленные элементы данных к круговой диаграмме. Как и с XML элементом dataSet
, определите categoryField
как имя статуса и valueField
как размер списка.
Вы должны получить следующий метод по завершении этого раздела:
@Subscribe
public void onInit(final InitEvent event) {
final Integer notStarted = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.NOT_STARTED)
.one();
final Integer inProgress = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.IN_PROGRESS)
.one();
final Integer completed = dataManager.loadValue(
"select count(u) from User u where u.onboardingStatus = :onboardingStatus",
Integer.class
)
.parameter("onboardingStatus", OnboardingStatus.COMPLETED)
.one();
ListChartItems<MapDataItem> items = new ListChartItems<>(
new MapDataItem(Map.of("category", "Completed", "value", notStarted)),
new MapDataItem(Map.of("category", "Not Started", "value", inProgress)),
new MapDataItem(Map.of("category", "In Progress", "value", completed))
);
pie.setDataSet(
new DataSet()
.withSource(
new DataSet.Source<MapDataItem>()
.withDataProvider(items)
.withCategoryField("category")
.withValueField("value")
)
);
}
Эта круговая диаграмма визуализирует процент сотрудников по статусу адаптации.