private void densityComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Content == null)
            {
                return;
            }

            int si = densityComboBox.SelectedIndex;

            if (si == 0)
            {
                foreach (var densityChart in densityCharts.Values)
                {
                    densityChart.Visible = false;
                }
            }
            else
            {
                var indices = GetDensityIndices(si).ToList();

                foreach (var entry in densityCharts)
                {
                    var variableName = entry.Key;
                    var densityChart = entry.Value;
                    if (!VisibleVariables.Contains(variableName) || partialDependencePlots[variableName].IsZoomed)
                    {
                        continue;
                    }

                    UpdateDensityChart(densityChart, variableName, indices);
                }
            }
        }
        private void SetStyles()
        {
            var tl = partialDependencePlotTableLayout;

            tl.RowStyles.Clear();
            tl.ColumnStyles.Clear();
            int numVariables = VisibleVariables.Count();

            if (numVariables == 0)
            {
                return;
            }

            // set column styles
            tl.ColumnCount = Math.Min(numVariables, MaxColumns);
            for (int c = 0; c < tl.ColumnCount; c++)
            {
                tl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100.0f / tl.ColumnCount));
            }

            // set row styles
            tl.RowCount = (int)Math.Ceiling((double)numVariables / tl.ColumnCount);
            var columnWidth = tl.Width / tl.ColumnCount; // assume all columns have the same width
            var rowHeight   = (int)(0.8 * columnWidth);

            for (int r = 0; r < tl.RowCount; r++)
            {
                tl.RowStyles.Add(new RowStyle(SizeType.Absolute, rowHeight));
            }
        }
        private void columnsNumericUpDown_ValueChanged(object sender, EventArgs e)
        {
            MaxColumns = (int)columnsNumericUpDown.Value;
            int columns = Math.Min(VisibleVariables.Count(), MaxColumns);

            if (columns > 0)
            {
                var tl = partialDependencePlotTableLayout;
                MaxColumns = columns;
                tl.SuspendLayout();
                ReOrderControls();
                SetStyles();
                tl.ResumeLayout();
                tl.Refresh();
                densityComboBox_SelectedIndexChanged(this, EventArgs.Empty);
            }
        }