void FillChart(string title, Func <ModelData.RegionData, float> dataToExtract)
        {
            var dateFrom = FromDate?.Invoke() ?? DateTime.Today;
            var dateTo   = ToDate?.Invoke() ?? DateTime.Today;
            var top      = Top?.Invoke()?.value ?? 5;
            var data     = DataExtractorRegion.FillRangeData(dateFrom, dateTo, top, dataToExtract);

            Title = dateFrom.Date == dateTo.Date
                    ? $"{title} {dateFrom.Date.ToShortDateString()}"
                    : $"{title} {Properties.Resources.BetweenDate} {dateFrom.Date:dd/MM/yy} {{Properties.Resources.And}} {dateTo.Date:dd/MM/yy)}";

            Func <ChartPoint, string> labelPoint = chartPoint =>
                                                   string.Format("{0}", chartPoint.Y.ToString("N0"));

            var series = new SeriesCollection();

            foreach (var region in data)
            {
                series.Add(
                    new PieSeries()
                {
                    Title  = region.lbl,
                    Values = new ChartValues <float> {
                        region.value
                    },
                    DataLabels = true,
                    LabelPoint = labelPoint
                });
            }

            this.chart.Series         = series;
            this.chart.LegendLocation = LegendLocation.Right;
        }
        private void FillChartCasesSwab()
        {
            var dateFrom = FromDate?.Invoke() ?? DateTime.Today;
            var dateTo   = ToDate?.Invoke() ?? DateTime.Today;
            var top      = Top?.Invoke()?.value ?? 5;
            var title    = Properties.Resources.RelationshipCasesSwabs;

            var swab  = DataExtractorRegion.FillRangeData(dateFrom, dateTo, 100, p => p.nuovi_tamponi).OrderBy(p => p.lbl);
            var cases = DataExtractorRegion.FillRangeData(dateFrom, dateTo, 100, p => p.nuovi_positivi).OrderBy(p => p.lbl);

            var data = cases.Zip(swab, (c, s) => new ReturnData()
            {
                lbl   = c.lbl,
                data  = c.data,
                value = c.value / s.value
            })
                       .OrderByDescending(o => o.value)
                       .Take(top)
                       .ToList();


            var Title = dateFrom.Date == dateTo.Date
                ? $"{title} {dateFrom.Date.ToShortDateString()}"
                : $"{title} {Properties.Resources.BetweenDate} {dateFrom.Date.ToString("dd/MM/yy")} {{Properties.Resources.And}} {dateTo.Date.ToString("dd/MM/yy")}";

            Func <ChartPoint, string> labelPoint = chartPoint =>
                                                   string.Format("{0}", chartPoint.Y.ToString("P2"));

            var series = new SeriesCollection();

            foreach (var region in data)
            {
                series.Add(
                    new PieSeries()
                {
                    Title  = region.lbl,
                    Values = new ChartValues <float> {
                        region.value
                    },
                    DataLabels = true,
                    LabelPoint = labelPoint
                });
            }

            this.chart.Series         = series;
            this.chart.LegendLocation = LegendLocation.Right;
        }