PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/Main/src/DevSamples/Log10Axis/Window1.xaml.cs

#
C# | 169 lines | 134 code | 29 blank | 6 comment | 10 complexity | 8f1ec8ab4813267e956b82cf400e36e2 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System.Windows;
  2. using System.Collections.Generic;
  3. using System.Windows.Controls;
  4. using System.Windows.Media;
  5. using Microsoft.Research.DynamicDataDisplay.DataSources;
  6. using Microsoft.Research.DynamicDataDisplay;
  7. using Microsoft.Research.DynamicDataDisplay.Charts;
  8. using Microsoft.Research.DynamicDataDisplay.Charts.Axes.Numeric;
  9. namespace Log10Axis
  10. {
  11. /// <summary>
  12. /// Interaction logic for D3LineChart.xaml
  13. /// </summary>
  14. public partial class Window1 : Window
  15. {
  16. private AxisInfo _xAxisInfo;
  17. private IList<AxisInfo> _yAxisInfoList;
  18. private IList<AxisInfo> _yAxisInfoSecList;
  19. private string _chartTitle = string.Empty;
  20. public string ChartTitle
  21. {
  22. get { return _chartTitle; }
  23. set { _chartTitle = value; }
  24. }
  25. public Window1()
  26. {
  27. InitializeComponent();
  28. }
  29. public Window1(AxisInfo xAxisInfo, IList<AxisInfo> yAxisInfoList)
  30. : this()
  31. {
  32. _xAxisInfo = xAxisInfo;
  33. _yAxisInfoList = yAxisInfoList;
  34. if (_xAxisInfo != null && _yAxisInfoList != null)
  35. {
  36. DrawPlots();
  37. }
  38. }
  39. public Window1(AxisInfo xAxisInfo, IList<AxisInfo> yAxisInfoList, IList<AxisInfo> yAxisInfoSecList)
  40. {
  41. InitializeComponent();
  42. _xAxisInfo = xAxisInfo;
  43. _yAxisInfoList = yAxisInfoList;
  44. _yAxisInfoSecList = yAxisInfoSecList;
  45. if (_xAxisInfo != null && _yAxisInfoList != null)
  46. {
  47. DrawPlots();
  48. }
  49. }
  50. private void DrawPlots()
  51. {
  52. HorizontalAxis xAxis = (HorizontalAxis)plotter.MainHorizontalAxis;
  53. xAxis.TicksProvider = new LogarithmNumericTicksProvider(10);
  54. xAxis.LabelProvider = new UnroundingLabelProvider();
  55. xAxis.ShowMajorLabels = true;
  56. xAxis.ShowMinorTicks = true;
  57. xAxis.SnapsToDevicePixels = true;
  58. xAxis.LabelProvider.SetCustomFormatter(info => info.Tick.ToString("#.######e0"));
  59. HorizontalAxisTitle HAT = new HorizontalAxisTitle()
  60. {
  61. Content = _xAxisInfo.AxisTitle
  62. };
  63. plotter.MainHorizontalAxis = xAxis;
  64. plotter.Children.Add(HAT);
  65. ((NumericAxis)plotter.MainHorizontalAxis).AxisControl.TicksPath.Stroke = Brushes.Blue;
  66. VerticalAxis yAxis = (VerticalAxis)plotter.MainVerticalAxis;
  67. yAxis.TicksProvider = new NumericTicksProvider();
  68. yAxis.LabelProvider = new UnroundingLabelProvider();
  69. yAxis.ShowMajorLabels = true;
  70. yAxis.ShowMinorTicks = true;
  71. yAxis.SnapsToDevicePixels = true;
  72. VerticalAxisTitle VAT = new VerticalAxisTitle()
  73. {
  74. Content = _yAxisInfoList[0].AxisTitle
  75. };
  76. plotter.MainVerticalAxis = yAxis;
  77. plotter.Children.Add(VAT);
  78. plotter.AxisGrid.DrawVerticalMinorTicks = true;
  79. plotter.AxisGrid.DrawHorizontalMinorTicks = true;
  80. plotter.MainVerticalAxis.Background = new LinearGradientBrush(Colors.White, Colors.LightGray, 90);
  81. var xPoints = _xAxisInfo.AxisDataPoints.AsXDataSource();
  82. // Create the main plot
  83. foreach (AxisInfo yAxInfo in _yAxisInfoList)
  84. {
  85. var yPoints = yAxInfo.AxisDataPoints.AsYDataSource();
  86. CompositeDataSource plot = xPoints.Join(yPoints);
  87. plotter.AddLineGraph(plot, yAxInfo.PlotColor, yAxInfo.PlotLineThickness, yAxInfo.AxisLegend);
  88. }
  89. // add secondary y-axis plots if any exist
  90. if (_yAxisInfoSecList != null)
  91. {
  92. InjectedPlotter innerPlotter = new InjectedPlotter();
  93. innerPlotter.SetViewportBinding = false;
  94. plotter.Children.Add(innerPlotter);
  95. HorizontalAxis ax = new HorizontalAxis();
  96. ax.Placement = AxisPlacement.Top;
  97. ax.TicksProvider = new LogarithmNumericTicksProvider(10);
  98. ax.LabelProvider = new UnroundingLabelProvider();
  99. ax.LabelProvider.SetCustomFormatter(info => info.Tick.ToString("#.######e0"));
  100. ax.ShowMajorLabels = true;
  101. ax.ShowMinorTicks = true;
  102. ax.SnapsToDevicePixels = true;
  103. ax.AxisControl.TicksPath.Stroke = Brushes.Red;
  104. plotter.Children.Add(ax);
  105. VerticalAxis yAxisSec = new VerticalAxis()
  106. {
  107. TicksProvider = new NumericTicksProvider(),
  108. LabelProvider = new UnroundingLabelProvider(),
  109. ShowMinorTicks = true,
  110. ShowMajorLabels = true,
  111. SnapsToDevicePixels = true,
  112. Placement = AxisPlacement.Right
  113. };
  114. VerticalAxisTitle VATsecondary = new VerticalAxisTitle()
  115. {
  116. Content = _yAxisInfoSecList[0].AxisTitle,
  117. Placement = AxisPlacement.Right
  118. };
  119. innerPlotter.MainVerticalAxis = yAxisSec;
  120. innerPlotter.Children.Add(VATsecondary);
  121. innerPlotter.MainVerticalAxis.Background = new LinearGradientBrush(Colors.White, Colors.Red, 90);
  122. foreach (AxisInfo yAxInfoSec in _yAxisInfoSecList)
  123. {
  124. var ySecPoints = yAxInfoSec.AxisDataPoints.AsYDataSource();
  125. CompositeDataSource plotSec = xPoints.Join(ySecPoints);
  126. /*innerP*/
  127. plotter.AddLineGraph(plotSec, yAxInfoSec.PlotColor, yAxInfoSec.PlotLineThickness, yAxInfoSec.AxisLegend);
  128. }
  129. }
  130. }
  131. }
  132. public class AxisInfo
  133. {
  134. public string AxisTitle;
  135. public string AxisLegend;
  136. public double[] AxisDataPoints;
  137. public Color PlotColor = Colors.Black;
  138. public int PlotLineThickness = 1;
  139. }
  140. }