public List <Plot> RenderPlots(List <Row> rows, ScatterPlotLayout layout)
        {
            var xAxisMap = layout.XAxisColumn != null
                ? _factory.CreateAxisMap(layout.XAxisColumn, 0d, 1d, layout.XAxisSortOrder)
                : null;

            var yAxisMap = layout.YAxisColumn != null
                ? _factory.CreateAxisMap(layout.YAxisColumn, 0d, 1d, layout.YAxisSortOrder)
                : null;

            var colorMap = layout.ColorColumn != null
                ? _factory.CreateColorMap(layout.ColorColumn, layout.ColorPalette, layout.ColorSortOrder)
                : null;

            var sizeMap = layout.SizeColumn != null
                ? _factory.CreateSizeMap(layout.SizeColumn, layout.LowerSize, layout.UpperSize, layout.SizeSortOrder)
                : null;

            var labelMap = layout.LabelColumn != null
                ? _factory.CreateLabelMap(layout.LabelColumn)
                : null;

            var plots = new List <Plot>();

            foreach (var row in rows)
            {
                var plot = new Plot();

                plot.Id = row.Id;

                plot.X = layout.XAxisColumn != null
                    ? xAxisMap.Map(row[layout.XAxisColumn.Index]) ?? 0.0
                    : 0.0;

                plot.Y = layout.YAxisColumn != null
                    ? yAxisMap.Map(row[layout.YAxisColumn.Index]) ?? 0.0
                    : 0.0;

                plot.Color = layout.ColorColumn != null
                    ? colorMap.Map(row[layout.ColorColumn.Index])
                    : DefaultColor;

                plot.Size = layout.SizeColumn != null
                    ? sizeMap.Map(row[layout.SizeColumn.Index]) ?? 0.0
                    : layout.UpperSize;

                plot.Image = layout.ShapeColumn != null
                    ? (BitmapImage)row[layout.ShapeColumn.Index]
                    : null;

                plot.Label = layout.LabelColumn != null
                    ? labelMap.Map(row[layout.LabelColumn.Index])
                    : null;

                plots.Add(plot);
            }

            return(plots);
        }
        public List <SizeLegendItemDto> Execute(GetSizeLegendItemsQuery query)
        {
            var scatterPlot = _repository.Get <ScatterPlot>();

            var layout = scatterPlot.GetLayout();

            var column = layout.SizeColumn;

            if (column == null)
            {
                return(new List <SizeLegendItemDto>());
            }

            var type = column.DataType;

            var map = _mapFactory.CreateSizeMap(column, layout.LowerSize, layout.UpperSize, layout.SizeSortOrder);

            var items = _legendFactory.Create(type, map, column.Values, layout.LowerSize, layout.UpperSize);

            return(items.ToList());
        }