Changeset 12598


Ignore:
Timestamp:
07/06/15 13:42:53 (4 years ago)
Author:
pfleck
Message:

#2379 Implemented sizing of markers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs

    r12595 r12598  
    5656    public BubbleChartView() {
    5757      InitializeComponent();
     58
     59      chart.CustomizeAllChartAreas();
     60      chart.ChartAreas[0].CursorX.Interval = 1;
     61      chart.ChartAreas[0].CursorY.Interval = 1;
     62      chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
     63      chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
    5864    }
    5965
     
    190196          var ys = GetValues(item, YAxisValue).ToList();
    191197          var ss = GetValues(item, SizeAxisValue).ToList();
    192           if (xs.Count > 0 && ys.Count > 0 && ss.Count == 1) {
    193             var s = ss[0];
     198          if (xs.Count > 0 && ys.Count > 0 && (ss.Count == 1 || ss.Count == xs.Count || ss.Count == ys.Count)) {
     199            var sEnum = ss.Count > 1 ? ss.GetEnumerator() : Enumerable.Repeat(ss[0], xs.Count * ys.Count).GetEnumerator();
     200            sEnum.MoveNext();
    194201            if (xs.Count > 1 && ys.Count > 1) { // index matching
    195202              for (int i = 0; i < Math.Min(xs.Count, ys.Count); i++)
    196                 series.Points.Add(new DataPoint(xs[i], new[] { ys[i], s }));
     203                series.Points.Add(new DataPoint(xs[i], new[] { ys[i], sEnum.Current }));
    197204            } else {
    198               foreach (var x in xs)
    199                 foreach (var y in ys)
    200                   series.Points.Add(new DataPoint(x, new[] { y, s }));
     205              foreach (var x in xs) {
     206                foreach (var y in ys) {
     207                  series.Points.Add(new DataPoint(x, new[] { y, sEnum.Current }));
     208                  sEnum.MoveNext();
     209                }
     210              }
    201211            }
    202212          }
    203213        }
     214        UpdateMarkerSizes();
    204215      }
    205216    }
     
    349360      }
    350361    }
     362
     363    private void UpdateMarkerSizes() {
     364      var series = chart.Series[0];
     365      if (series.Points.Count <= 0) return;
     366
     367      var sizeValues = series.Points.Select(p => p.YValues[1]);
     368      double minSizeValue = sizeValues.Min();
     369      double maxSizeValue = sizeValues.Max();
     370      double sizeRange = maxSizeValue - minSizeValue;
     371
     372      const int smallestBubbleSize = 7;
     373
     374      foreach (DataPoint point in series.Points) {
     375        //calculates the relative size of the data point  0 <= relativeSize <= 1
     376        double relativeSize = (point.YValues[1] - minSizeValue);
     377        if (sizeRange > double.Epsilon) {
     378          relativeSize /= sizeRange;
     379
     380          //invert bubble sizes if the value of the trackbar is negative
     381          //if (sizeTrackBar.Value < 0) relativeSize = Math.Abs(relativeSize - 1);
     382        } else relativeSize = 1;
     383
     384        double sizeChange = /*Math.Abs(sizeTrackBar.Value)*/ 10 * relativeSize;
     385        //double sizeChange = 0;
     386        point.MarkerSize = (int)Math.Round(sizeChange + smallestBubbleSize);
     387      }
     388    }
    351389    #endregion
    352390
Note: See TracChangeset for help on using the changeset viewer.