Добрый день! Возникла необходимость генерации SerialChart в контроллере. В ходе работы над этой задачей столкнулся с проблемой, что нужно указывать конкретные столбцы в valueField. Как быть если заранее число графиков, которые будут отображены неизвестно? Важно, что нужен именно SerialChart, например сделать через dataSet’ы в StockChart не подходит. (И раз уж заикнулся, как настроить compare сетов данных? Чтобы не в процентах была шкала)
Добрый день.
Для схожей задачи делаем следующее:
Принимаем данные для чарта (List<Map> points
), далее для каждого ключа создаем граф:
points.get(0).keySet().forEach(valueFIeld -> {
if (!valueFIeld.equals(categoryField)) {
Graph newGraph = new Graph();
newGraph.setValueField(valueFIeld );
/*...*/
chart.addGraphs(newGraph);
Соответственно, в DataProvider отправляются точки с теми же названиями филдов.
1 симпатия
Здравствуйте!
Как уже было упомянуто выше, если неизвестно число графиков в контроллере экрана нужно пройтись по каждому полю и создать для него граф.
Простой пример:
XML:
<charts:serialChart id="serialChart"
height="100%"
width="100%">
<charts:legend/>
</charts:serialChart>
Контроллер экрана:
private List<CountryData> countryDataList = new ArrayList<>();
public static final String CATEGORY_FIELD = "country";
@Inject
private SerialChart serialChart;
@Override
public void init(Map<String, Object> params) {
countryDataList.add(new CountryData("Country 1", 1211));
countryDataList.add(new CountryData("Country 2", 1092));
serialChart.setCategoryField(CATEGORY_FIELD);
DataProvider dataProvider = new ListDataProvider();
for (CountryData data : countryDataList) {
MapDataItem item = new MapDataItem();
item.add(CATEGORY_FIELD, data.getName()); // значение для поля категории
item.add(data.getName(), data.getPopulation()); // значение для графа
dataProvider.addItem(item);
serialChart.addGraphs(createGraph(data));
}
serialChart.setDataProvider(dataProvider);
}
private Graph createGraph(CountryData data) {
Graph graph = new Graph();
graph.setType(GraphType.COLUMN);
graph.setFillAlphas(1.0);
graph.setTitle(data.getName());
graph.setValueField(data.getName());
return graph;
}
Чтобы сравнение DataSet
-ов было не в процентах, нужно в StockPanel
свойство recalculateToPercents
установить в “never”.
2 симпатии