Esempio n. 1
0
        public DxScatterplot(DxScatterplotSettings settings, DataTable mydt)         //, string xvar, string yvar, string titleinput, string colorsby)
        {
            _settings            = settings;
            _settings.paneLevels = new List <string>();

            DataTable dataxy = GetXYData(mydt);

            ConstructScatterplot(dataxy);
            FormatChart();

            if (corrs != null)
            {
                this.n = corrs.n;
            }
        }
Esempio n. 2
0
        //Scatterplot
        public DxChartBatch(DxScatterplotSettings mysettings, DataTable dt)
        {
            Initialize();

            _batchsettings = (DxChartSettings)mysettings;

            outputtype = DxOutputtype.Scatterplot;
            layout     = mysettings.chartlayout;

            _vars = mysettings.analysisvars();


            //Define the sets of scatterplots to create.



            //// **** NO REPEATED MEASURES ****
            ////Square matrix
            //if (mysettings.repeatedmeasVarname == "none" & mysettings.analysisvarsX() == mysettings.analysisvarsY())
            //{
            //	XYpairs pairs = new XYpairs(mysettings.analysisvarsX()); //, mysettings.colors[0]);

            //	foreach (XYpair pair in pairs.pairs)
            //	{
            //		DxChart chart = new DxScatterplot(mysettings, dt, pair);
            //		if(chart.n > 1) charts.Add(chart);
            //	}
            //}
            ////Rectangle matrix
            //else if (mysettings.repeatedmeasVarname == "none" & mysettings.analysisvarsX() != mysettings.analysisvarsY())
            //{
            //	XYpairs pairs = new XYpairs(mysettings.analysisvarsX(), mysettings.analysisvarsY()); //, mysettings.colors[0]);

            //	if(mysettings.chartlayout == DxLayout.Horizontal)
            //	{
            //		mysettings.chartlayout = DxLayout.Vertical;
            //		mysettings.maxRow = mysettings.analysisvarsY().Count;
            //	}
            //	else if (mysettings.chartlayout == DxLayout.Vertical)
            //	{
            //		mysettings.chartlayout = DxLayout.Horizontal;
            //		mysettings.maxCol = mysettings.analysisvarsX().Count;
            //	}

            //	foreach (XYpair pair in pairs.pairs)
            //	{
            //		DxChart chart = new DxScatterplot(mysettings, dt, pair);
            //		if (chart.n > 1) charts.Add(chart);
            //	}
            //}
            //// **** YES REPEATED MEASURES ****
            //else
            if (true)
            {
                //List<string> repeatedmeas_levels = mysettings.rptmeasLevels(dt); //.AsEnumerable().Select(f => f.Field<string>(mysettings.repeatedmeasVarname)).Distinct().ToList();
                //List<string> analysisvars = mysettings.analysisvars();
                List <string> idvars = new List <string> {
                    "id"
                };

                if (mysettings.colorvar != "none")
                {
                    idvars.Add(mysettings.colorvar);
                }
                if (mysettings.panelvar != "none")
                {
                    idvars.Add(mysettings.panelvar);
                }

                idvars.Remove(mysettings.repeatedmeasVarname);



                List <string> keepvars = new List <string>();
                if (mysettings.repeatedmeasVarname != "none")
                {
                    keepvars.Add(mysettings.repeatedmeasVarname);
                }
                keepvars.AddRange(mysettings.analysisvars());
                keepvars.AddRange(idvars);

                DataTable dtwide;
                if (mysettings.repeatedmeasVarname != "none")
                {
                    // Widen the data using the repeated measure value
                    DataSubsets subsets = new DataSubsets(dt, keepvars, new List <string> {
                        mysettings.repeatedmeasVarname
                    });
                    dtwide = subsets.FullOuterJoinDataTables(idvars);
                }
                else
                {
                    dtwide = dt.Copy();
                }
                List <string> colnames = dtwide.ColumnNames();

                XYpairs pairs = new XYpairs(mysettings.analysisvars(), mysettings.rptmeasLevels(dt), mysettings.current_xypairtype);

                //pairs.RemoveInverse();

                foreach (XYpair pair in pairs.pairs)
                {
                    DxChart chart = new DxScatterplot(mysettings, dtwide, pair);
                    if (chart.n > 1)
                    {
                        charts.Add(chart);
                    }
                    //new RowColIndex( )
                    //chart.rowcolIndex(new
                }
            }
        }
Esempio n. 3
0
 public ScatterplotSeries(DataTable dt, DxScatterplotSettings settings)
 {
     CreateSeries(dt, settings);
 }
Esempio n. 4
0
        //public ScatterplotSeries(DataTable dt, string xvar, string yvar, string colorvar, string panelvar, List<Color> colors, List<string> color_levels)
        //{
        //	CreateSeries(dt, xvar, yvar, colorvar, panelvar, colors, color_levels);
        //}


        private void CreateSeries(DataTable dt, DxScatterplotSettings settings)         //, string xvar, string yvar, string colorvar, string panelvar, List<Color> colors, List<string> color_levels)
        {
            _list_corrs          = new List <Corrs>();
            _list_dxseriespoints = new List <DxSeriesPoints>();

            //, settings.xaxisvar, settings.yaxisvar, settings.colorvar, settings.panevar, settings.colors, settings.colorLevels);

            List <string> groupvars    = new List <string>();
            int           panename_idx = -1;

            if (settings.panevar == "none" & settings.colorvar != "none")                //This is different than for Bar
            {
                groupvars = new List <string>()
                {
                    settings.colorvar
                };
                panename_idx = 0;
            }
            else if (settings.panevar != "none" & settings.colorvar == "none")
            {
                groupvars = new List <string>()
                {
                    settings.panevar
                };
                panename_idx = 0;
            }
            else if (settings.panevar != "none" & settings.colorvar != "none")
            {
                groupvars = new List <string>()
                {
                    settings.panevar, settings.colorvar
                };
                panename_idx = 0;
            }

            groupvars = groupvars.Distinct().ToList();

            List <DxSeriesPoints> list_series = new List <DxSeriesPoints>();

            try
            {
                // from: http://www.scriptscoop.net/t/7516b362c821/c-c-linq-how-to-build-group-by-clause-dynamically.html
                IEnumerable <string> columnsToGroupBy = groupvars;
                var groups = dt.AsEnumerable()
                             .GroupBy(r => new NTuple <object>(from column in columnsToGroupBy select r[column]));

                int n_groups = groups.Count();
                foreach (var group in groups)
                {
                    DataTable dtSub = group.CopyToDataTable();

                    Corrs tmpcorrs = new Corrs(dtSub, settings.xaxisvar, settings.yaxisvar, 2);



                    _list_corrs.Add(tmpcorrs);

                    //List<string> keyvalues = group.Key.Values[0].ToString();
                    List <string> keyvalues = new List <string>();
                    foreach (var s in group.Key.Values)
                    {
                        keyvalues.Add(s.ToString());
                    }


                    DxSeriesPoints pts = new DxSeriesPoints(dtSub, settings.xaxisvar, settings.yaxisvar, settings.colorvar, settings.colors, settings.colorLevels);

                    pts.label = String.Join(" : ", keyvalues);

                    pts.panename = (panename_idx >= 0) ? keyvalues[panename_idx] : "none";

                    _list_dxseriespoints.Add(pts);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("ERROR! qryGroupBy  Msg:" + ex.Message + "............." + ex.StackTrace.ToString());
            }


            //return list_series;
        }
Esempio n. 5
0
        public void ProcessOrder(DxChartOrder order)
        {
            if (order.isOrderFilled)             //Already have batches
            {
                order.batches.Clear();
            }

            //Skip the_dpdata stuff if _dt is already populated
            if (_dt == null)
            {
                bool hassameworksheet = order.HasSameWorksheet(_dpdata);

                if (!hassameworksheet)
                {
                    //Need new DPData
                    _dataproject.selectedsheet = order.worksheet;
                    _dpdata = new DPData(_dataproject, order.filter);
                }


                bool hassamefilter = order.HasSameFilter(_dpdata);

                if (!hassamefilter)
                {
                    _dpdata.filter = order.filter;
                }

                _dt = _dpdata.dt;
            }

            //Each order will result in a list of batches
            //List<DxBatchOcharts> batchlist = new List<DxBatchOcharts>();
            List <DxChartBatch> batchlist = new List <DxChartBatch>();

            if (order.list_settings != null)
            {
                foreach (DxChartSettings settings in order.list_settings)
                {
                    #region Histogram
                    if (settings.outputtype == DxOutputtype.Histogram)
                    {
                        DxHistogramSettings mysettings = (DxHistogramSettings)settings;
                        DxChartBatch        batch      = new DxChartBatch(mysettings, dt);
                        PrepareBatch(batch, settings);
                        batchlist.Add(batch);
                    }
                    #endregion

                    #region Barchart
                    else if (settings.outputtype == DxOutputtype.Barchart)
                    {
                        DxBarchartSettings mysettings = (DxBarchartSettings)settings;
                        DxChartBatch       batch      = new DxChartBatch(mysettings, dt);
                        PrepareBatch(batch, settings);
                        batchlist.Add(batch);
                    }
                    #endregion

                    #region Scatterplot
                    else if (settings.outputtype == DxOutputtype.Scatterplot)
                    {
                        DxScatterplotSettings mysettings = (DxScatterplotSettings)settings;

                        if (mysettings.repeatedmeasVarname == "none")
                        {
                            //DxChartBatch batch = new DxChartBatch(mysettings, dt);
                            //PrepareBatch(batch, settings);
                            //batchlist.Add(batch);

                            foreach (XYpairType mode in mysettings.xypairtypes)
                            {
                                if (mode == XYpairType.AllVars_IgnoreLevelsOfRptMeas)
                                {
                                    mysettings.current_xypairtype = mode;
                                    //mysettings.maxCol = ncol1;
                                    //mysettings.maxRow = tmpvars.Count;
                                    mysettings.chartlayout         = DxLayout.Horizontal;
                                    mysettings.repeatedmeasVarname = "none";

                                    DxChartBatch batch1 = new DxChartBatch(mysettings, dt);
                                    PrepareBatch(batch1, (DxChartSettings)mysettings);
                                    batch1.batchtitle = String.Format("All variables (IGNORE Time/RptMeas)");
                                    batch1.maxCol     = batch1.charts.Count;
                                    batchlist.Add(batch1);
                                }
                            }
                        }
                        else if (mysettings.repeatedmeasVarname != "none")
                        {
                            List <string> repeatedmeas_levels = dt.AsEnumerable().Select(f => f.Field <string>(mysettings.repeatedmeasVarname)).Distinct().ToList();

                            List <string> analysisvars = new List <string>();
                            analysisvars.AddRange(mysettings.numvars);
                            if (mysettings.agevars != null)
                            {
                                analysisvars.AddRange(mysettings.agevars);
                            }

                            int n_rptmeas      = repeatedmeas_levels.Count;
                            int n_analysisvars = analysisvars.Count;

                            int ncol1 = utilStats.TriangleNumber(n_rptmeas);


                            List <string> tmpvars  = mysettings.analysisvars();
                            List <string> tmpvarsX = mysettings.analysisvarsX();
                            List <string> tmpvarsY = mysettings.analysisvarsY();


                            #region Process By Mode
                            foreach (XYpairType mode in mysettings.xypairtypes)
                            {
                                if (mode == XYpairType.AllVars_IgnoreLevelsOfRptMeas)
                                {
                                    mysettings.current_xypairtype = mode;
                                    //mysettings.maxCol = ncol1;
                                    //mysettings.maxRow = tmpvars.Count;
                                    mysettings.chartlayout         = DxLayout.Horizontal;
                                    mysettings.repeatedmeasVarname = "none";

                                    DxChartBatch batch1 = new DxChartBatch(mysettings, dt);
                                    PrepareBatch(batch1, (DxChartSettings)mysettings);
                                    batch1.batchtitle = String.Format("All variables (IGNORE Time/RptMeas)");
                                    batch1.maxCol     = batch1.charts.Count;
                                    batchlist.Add(batch1);
                                }

                                if (mode == XYpairType.SameVar_AcrossLevelsOfRptMeas)
                                {
                                    mysettings.current_xypairtype = mode;
                                    mysettings.maxCol             = ncol1;
                                    //mysettings.maxRow = tmpvars.Count;
                                    mysettings.chartlayout = DxLayout.Horizontal;

                                    //Loop over vars, make a batch for each one
                                    foreach (string v in tmpvars)
                                    {
                                        mysettings.manualXandYvars = true;
                                        mysettings.xvars           = new List <string> {
                                            v
                                        };
                                        mysettings.yvars = new List <string> {
                                            v
                                        };
                                        DxChartBatch batch1 = new DxChartBatch(mysettings, dt);
                                        PrepareBatch(batch1, (DxChartSettings)mysettings);
                                        batch1.batchtitle = String.Format("{0} ACROSS levels of {1}", v, mysettings.repeatedmeasVarname);
                                        batch1.maxCol     = batch1.charts.Count;
                                        batchlist.Add(batch1);
                                    }
                                }

                                if (mode == XYpairType.DiffVar_WithinLevelsOfRptMeas)
                                {
                                    //#2 - treat it as square
                                    mysettings.current_xypairtype = mode;
                                    //mysettings.numvars = tmpvars;
                                    mysettings.xvars = null;
                                    mysettings.yvars = null;

                                    mysettings.chartlayout = DxLayout.Upper;
                                    mysettings.maxRow      = tmpvars.Count;

                                    List <string> rptmeasLevels = dt.AsEnumerable().Select(f => f.Field <string>(mysettings.repeatedmeasVarname)).Distinct().ToList();

                                    List <string> tmpvars_with_id = new List <string>();
                                    tmpvars_with_id.AddRange(tmpvars);
                                    tmpvars_with_id.Add("id");

                                    DataSubsets dt_rptmeas = new DataSubsets(dt, tmpvars_with_id, mysettings.repeatedmeasVarname);

                                    //Loop across levels of the RptMeas
                                    foreach (DataSubset subset in dt_rptmeas.subsets)
                                    {
                                        DxChartBatch batch2 = new DxChartBatch(mysettings, subset.dt);
                                        PrepareBatch(batch2, (DxChartSettings)mysettings);
                                        batch2.batchtitle = String.Format("Variables WITHIN {0}: {1}", mysettings.repeatedmeasVarname, subset.Vals_ToString());
                                        batch2.maxCol     = batch2.charts.Count;
                                        batchlist.Add(batch2);
                                    }
                                }

                                if (mode == XYpairType.DiffVar_AcrossLevelsOfRptMeas)
                                {
                                    //#2 - back to original
                                    mysettings.current_xypairtype = mode;
                                    //mysettings.numvars = tmpvars;
                                    mysettings.xvars           = tmpvarsX;
                                    mysettings.yvars           = tmpvarsY;
                                    mysettings.manualXandYvars = true;
                                    mysettings.chartlayout     = DxLayout.Horizontal;

                                    List <string> rptmeasLevels = dt.AsEnumerable().Select(f => f.Field <string>(mysettings.repeatedmeasVarname))
                                                                  .Distinct().ToList();
                                    //HERE!!!!

                                    for (int i = 0; i < (rptmeasLevels.Count - 1); i++)
                                    {
                                        for (int j = i + 1; j < rptmeasLevels.Count; j++)
                                        {
                                            DataView dv = new DataView(dt);                                             // dt.AsDataView();
                                            dv.RowFilter = String.Format("{0} IN ('{1}','{2}')", mysettings.repeatedmeasVarname, rptmeasLevels[i], rptmeasLevels[j]);
                                            DataTable dt_sub = dv.ToTable();

                                            if (dt_sub.Rows.Count > 1)
                                            {
                                                DxChartBatch batch3 = new DxChartBatch(mysettings, dt_sub);
                                                PrepareBatch(batch3, (DxChartSettings)mysettings);
                                                batch3.batchtitle = String.Format("Variables ACROSS {0}:{1} & {2}", mysettings.repeatedmeasVarname, rptmeasLevels[i], rptmeasLevels[j]);
                                                batch3.maxCol     = batch3.charts.Count;
                                                batchlist.Add(batch3);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion
                    }
                    #endregion

                    #region Actogram
                    else if (settings.outputtype == DxOutputtype.Actogram)
                    {
                        DxActogramSettings mysettings = (DxActogramSettings)settings;
                        mysettings.outputtype = DxOutputtype.Actogram;

                        List <string> varnames = new List <string>()
                        {
                            "id"
                        };
                        varnames.AddRange(mysettings.numvars);
                        varnames.Add(mysettings.xaxisvar);
                        varnames.Add(mysettings.colorvar);
                        varnames.RemoveAll(item => item == "variable");
                        varnames.RemoveAll(item => item == "none");


                        DataSubsets subsets = new DataSubsets(dt, varnames, new List <string> {
                            mysettings.panelvar
                        });

                        DxChartBatch batch2 = new DxChartBatch(DxOutputtype.Actogram, mysettings);

                        foreach (DataSubset subset in subsets.subsets)
                        {
                            mysettings.date_txt = subset.dt.AsEnumerable().Min(f => f.Field <string>("report_date"));

                            DxChartBatch subbatch = new DxChartBatch(mysettings, subset.dt, subset.Cols_and_Vals_ToString());

                            foreach (DxChart sub in subbatch.charts)
                            {
                                batch2.charts.Add(sub);
                            }
                        }
                        PrepareBatch(batch2, mysettings);
                        batchlist.Add(batch2);
                    }
                    #endregion

                    #region Lineplot
                    else if (settings.outputtype == DxOutputtype.Lineplot)
                    {
                        DxLineplotSettings mysettings = (DxLineplotSettings)settings;

                        //NO Panels
                        if (mysettings.panelvar == "none" | mysettings.panelvar == "variable")
                        {
                            DxChartBatch batch1 = new DxChartBatch(mysettings, dt, " ");
                            PrepareBatch(batch1, settings);
                            batchlist.Add(batch1);
                        }
                        else
                        {
                            List <string> varnames = new List <string>()
                            {
                                "id"
                            };
                            varnames.AddRange(mysettings.numvars);
                            varnames.Add(mysettings.xaxisvar);
                            varnames.Add(mysettings.colorvar);
                            varnames.RemoveAll(item => item == "variable");
                            varnames.RemoveAll(item => item == "none");


                            DataSubsets subsets = new DataSubsets(dt, varnames, new List <string> {
                                mysettings.panelvar
                            });

                            DxChartBatch batch2 = new DxChartBatch(DxOutputtype.Lineplot, mysettings);
                            batch2.vars = mysettings.numvars;
                            foreach (DataSubset subset in subsets.subsets)
                            {
                                DxChartBatch subbatch = new DxChartBatch(mysettings, subset.dt, subset.Cols_and_Vals_ToString());

                                foreach (DxChart sub in subbatch.charts)
                                {
                                    batch2.charts.Add(sub);
                                }
                            }
                            PrepareBatch(batch2, mysettings);
                            batchlist.Add(batch2);
                        }
                    }
                    #endregion
                }
            }

            order.batches.AddRange(batchlist);

            //The invoice serves as a table of contents for what was actually created
            order.PrepareInvoice();
        }