package demo.more;
import org.zkoss.chart.Charts;
import org.zkoss.chart.Legend;
import org.zkoss.chart.Point;
import org.zkoss.chart.Responsive;
import org.zkoss.chart.Series;
import org.zkoss.chart.SeriesAccessibility;
import org.zkoss.chart.Theme;
import org.zkoss.chart.ThemeColors;
import org.zkoss.chart.Tooltip;
import org.zkoss.chart.XAxis;
import org.zkoss.chart.YAxis;
import org.zkoss.chart.plotOptions.SeriesPlotOptions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Window;
public class PolygonComposer extends SelectorComposer<Window> {
@Wire
Charts chart;
public void doAfterCompose(Window comp) throws Exception {
super.doAfterCompose(comp);
chart.setSubtitle("Source: " +
"<a href=\"https://www.worlddata.info/average-bodyheight.php\"" +
"target=\"_blank\">WorldData</a>");
XAxis xAxis = chart.getXAxis();
xAxis.setGridLineWidth(1);
xAxis.setTitle("Height (cm)");
xAxis.setStartOnTick(true);
xAxis.setEndOnTick(true);
xAxis.setShowLastLabel(true);
YAxis yAxis = chart.getYAxis();
yAxis.setTitle("Weight (kg)");
Legend legend = chart.getLegend();
legend.setLayout("vertical");
legend.setAlign("right");
legend.setVerticalAlign("middle");
Tooltip tooltip = chart.getTooltip();
tooltip.setHeaderFormat("<b>{point.key}</b><br>");
tooltip.setPointFormat("{point.x} cm, {point.y} kg");
Series series0 = chart.getSeries(0);
series0.setName("Target");
series0.setType("polygon");
series0.setColor("rgba(44,175,254,0.5)");
series0.setData(Point.of(163, 42), Point.of(162, 46), Point.of(162, 55),
Point.of(163, 64), Point.of(164, 70), Point.of(170, 90),
Point.of(181, 100), Point.of(182, 90), Point.of(173, 52),
Point.of(166, 45));
SeriesPlotOptions plotOptions = series0.getPlotOptions();
plotOptions.setEnableMouseTracking(false);
SeriesAccessibility accessibility = plotOptions.getAccessibility();
accessibility.setExposeAsGroupOnly(true);
accessibility.setDescription("Target ranges in an upwards trending diagonal from 161 to 182 on the x axis, and 42 to 100 on the y axis.");
Series series1 = chart.getSeries(1);
series1.setName("Observations");
series1.setType("scatter");
series1.setColor(ThemeColors.getThemeColors(Theme.DEFAULT)[1]);
series1.setData(initPoint(184, 87.9, "Netherlands"),
initPoint(183, 90.4, "Montenegro"),
initPoint(182, 89.9, "Estonia"),
initPoint(182, 86.8, "Denmark"),
initPoint(181, 89.2, "Iceland"),
initPoint(181, 89.9, "Czechia"), initPoint(180, 89.9, "Serbia"),
initPoint(180, 89.9, "Sweden"), initPoint(180, 89.1, "Norway"),
initPoint(180, 80.7, "Dominica"),
initPoint(180, 86.3, "Finland"),
initPoint(179, 88.4, "Bermuda"),
initPoint(179, 90.7, "Puerto Rico"),
initPoint(178, 84.1, "Belarus"),
initPoint(178, 103.7, "Cook Islands"),
initPoint(177, 98.8, "Niue"),
initPoint(177, 103.2, "American Samoa"),
initPoint(176, 80.3, "Russia"),
initPoint(176, 91.1, "Saint Lucia"),
initPoint(175, 67.0, "Senegal"), initPoint(175, 93.7, "Tonga"),
initPoint(174, 74.6, "Algeria"),
initPoint(174, 84.7, "Argentina"),
initPoint(174, 79.5, "Portugal"),
initPoint(173, 73.6, "Mauritius"),
initPoint(173, 91.8, "Samoa"), initPoint(172, 69.5, "Japan"),
initPoint(172, 74.0, "Bahrain"), initPoint(171, 64.1, "Chad"),
initPoint(171, 88.0, "Tuvalu"), initPoint(171, 67.8, "Sudan"),
initPoint(170, 58.8, "Eritrea"), initPoint(170, 63.9, "Kenya"),
initPoint(170, 74.7, "Mongolia"),
initPoint(170, 65.1, "Nigeria"), initPoint(169, 93.0, "Nauru"),
initPoint(169, 81.1, "Micronesia"),
initPoint(169, 64.9, "Ghana"),
initPoint(169, 71.9, "South Africa"),
initPoint(168, 61.2, "Vietnam"),
initPoint(168, 65.9, "Ivory Coast"),
initPoint(168, 69.2, "Maldives"),
initPoint(168, 56.5, "Ethiopia"),
initPoint(167, 74.2, "Ecuador"),
initPoint(167, 60.5, "Burundi"), initPoint(166, 69.6, "India"),
initPoint(166, 74.7, "Brunei"),
initPoint(165, 57.7, "Bangladesh"),
initPoint(165, 58.4, "Madagascar"),
initPoint(165, 61.8, "Philippines"),
initPoint(164, 60.5, "Nepal"),
initPoint(164, 69.1, "Guatemala"),
initPoint(163, 62.5, "Yemen"), initPoint(162, 59.5, "Laos"),
initPoint(159, 53.9, "Timor-Leste"));
Responsive.Rule rule = chart.getResponsive().getRule();
rule.getCondition().setMaxWidth(500);
Legend legend1 = rule.getChartOptions().getLegend();
legend1.setAlign("center");
legend1.setLayout("horizontal");
legend1.setVerticalAlign("bottom");
}
private Point initPoint(Number x, Number y, String name) {
return new Point(name, y, x);
}
}