// ** utilities void CreateDataSeries(C1Chart chart, WeatherData[] data) { chart.Data.Children.Clear(); #if DataBinding chart.Data.ItemsSource = data; #else int len = data.Length; DateTime[] days = new DateTime[len]; double[] tmin = new double[len]; double[] tmax = new double[len]; double[] tavg = new double[len]; for (int i = 0; i < len; i++) { days[i] = data[i].DateTime; tmin[i] = data[i].TMin; tmax[i] = data[i].TMax; tavg[i] = data[i].TAvg; } #endif XYDataSeries ds = new XYDataSeries(); ds.Label = "Minimum"; #if DataBinding ds.ValueBinding = new Binding("TMin"); ds.XValueBinding = new Binding("DateTime"); #else ds.XValuesSource = days; ds.ValuesSource = tmin; #endif ds.ConnectionStroke = new SolidColorBrush(Colors.Blue); chart.Data.Children.Add(ds); ds = new XYDataSeries(); ds.Label = "Maximum"; #if DataBinding ds.ValueBinding = new Binding("TMax"); ds.XValueBinding = new Binding("DateTime"); #else ds.XValuesSource = days; ds.ValuesSource = tmax; #endif ds.ConnectionStroke = new SolidColorBrush(Colors.Red); chart.Data.Children.Add(ds); ds = new XYDataSeries(); ds.Label = "Average"; #if DataBinding ds.ValueBinding = new Binding("TAvg"); ds.XValueBinding = new Binding("DateTime"); #else ds.XValuesSource = days; ds.ValuesSource = tavg; #endif chart.Data.Children.Add(ds); foreach (DataSeries ser in chart.Data.Children) ser.ConnectionStrokeThickness = 1; chart.View.AxisX.IsTime = true; chart.View.AxisX.AnnoPosition = AnnoPosition.Near; }
// ** ctor public ZoomChartControl() { InitializeComponent(); Loaded += new RoutedEventHandler(ZoomChart_Loaded); // read data CSVData data = new CSVData(); using (Stream stream = Assembly.GetExecutingAssembly(). GetManifestResourceStream("ChartSamples.Resources.weatherYear.csv")) { data.Read(stream, true, false); } int len = data.Length; WeatherData[] wdata = new WeatherData[len]; double min = double.MaxValue; double max = double.MinValue; // fill array for (int i = 0; i < len; i++) { wdata[i] = new WeatherData(DateTime.Parse(data[i, 0]), double.Parse(data[i, "Max TemperatureF"]), double.Parse(data[i, "Mean TemperatureF"]), double.Parse(data[i, "Min TemperatureF"])); min = Math.Min(min, wdata[i].TMin); max = Math.Max(max, wdata[i].TMax); } _min = wdata[0].DateTime.ToOADate(); _max = wdata[len - 1].DateTime.ToOADate(); if (len > 0) { chart.BeginUpdate(); CreateDataSeries(chart, wdata); chart.ChartType = ChartType.Line; chart.View.AxisX.AnnoFormat = "MMM"; chart.View.AxisX.MinorTickHeight = 0; chart.View.AxisX.Min = _min; chart.View.AxisX.Max = _max; chart.EndUpdate(); chartZoom.BeginUpdate(); CreateDataSeries(chartZoom, wdata); chartZoom.ChartType = ChartType.Line; chartZoom.View.AxisX.AnnoFormat = "dd-MMM"; chartZoom.View.AxisX.Max = _min + 0.25 * (_max - _min); chartZoom.View.AxisX.MinorTickHeight = 0; chartZoom.EndUpdate(); } }
private void SetTemperatureChart() { // read data CSVData data = new CSVData(); using (Stream stream = Assembly.GetExecutingAssembly(). GetManifestResourceStream("ChartSamples.Resources.weatherYear.csv")) { data.Read(stream, true, true); } int len = data.Length; WeatherData[] wdata = new WeatherData[len]; double min = double.MaxValue; double max = double.MinValue; // fill the array for (int i = 0; i < len; i++) { wdata[i] = new WeatherData(DateTime.Parse(data[i, 0]), double.Parse(data[i, "Max TemperatureF"]), double.Parse(data[i, "Mean TemperatureF"]), double.Parse(data[i, "Min TemperatureF"])); min = Math.Min(min, wdata[i].TMin); max = Math.Max(max, wdata[i].TMax); } if (len > 0) { chart.BeginUpdate(); chart.Data.Children.Clear(); chart.Data.ItemsSource = wdata; // create data series HighLowSeries ds = new HighLowSeries(); ds.ChartType = ChartType.Gantt; ds.Label = "Temp"; ds.LowValueBinding = new Binding("TMin"); ds.XValueBinding = new Binding("DateTime"); ds.HighValueBinding = new Binding("TMax"); ds.Style = this.Resources["highlowseries"] as Style; chart.Data.Children.Add(ds); XYDataSeries ds2 = new XYDataSeries(); ds2.ChartType = ChartType.Line; ds2.Label = "Average"; ds2.ValueBinding = new Binding("TAvg"); ds2.XValueBinding = new Binding("DateTime"); chart.Data.Children.Add(ds2); // set axis min and max chart.View.AxisX.Min = wdata[0].DateTime.Subtract(new TimeSpan(1, 0, 0, 0)).ToOADate(); chart.View.AxisX.Max = wdata[len - 1].DateTime.ToOADate(); chart.View.AxisY.Min = min; chart.View.AxisY.Max = max; // style chart chart.View.AxisX.IsTime = true; chart.View.AxisY.MajorTickThickness = 0; chart.View.AxisY.MinorTickThickness = 0; chart.View.AxisY.AxisLine = new Line() { StrokeThickness = 0 }; chart.View.AxisX.Scale = 0.4; chart.View.AxisX.ScrollBar = new AxisScrollBar(); chart.View.AxisX.MajorGridStrokeThickness = 0; chart.View.AxisX.MinorGridStrokeThickness = 0; chart.View.AxisX.MajorTickThickness = 0; chart.View.AxisX.MinorTickThickness = 0; chart.View.AxisX.AxisLine = new Line() { StrokeThickness = 0 }; chart.View.AxisY.Title = new TextBlock() { Text = "Temperature", HorizontalAlignment = System.Windows.HorizontalAlignment.Center }; chart.EndUpdate(); } }
public MultipleAxes() { InitializeComponent(); // read data CSVData data = new CSVData(); using (Stream stream = Assembly.GetExecutingAssembly(). GetManifestResourceStream("ChartSamples.Resources.weatherYear.csv")) { data.Read(stream, true, true); } int len = data.Length; WeatherData[] wdata = new WeatherData[len]; double min = double.MaxValue; double max = double.MinValue; // fill the array for (int i = 0; i < len; i++) { wdata[i] = new WeatherData(DateTime.Parse(data[i, 0]), double.Parse(data[i, "Max TemperatureF"]), double.Parse(data[i, "Mean TemperatureF"]), double.Parse(data[i, "Min TemperatureF"])); min = Math.Min(min, wdata[i].TMin); max = Math.Max(max, wdata[i].TMax); } if (len > 0) { chart.BeginUpdate(); chart.Data.Children.Clear(); chart.Data.ItemsSource = wdata; Style ss = (Style)Resources["sstyle"]; // create data series XYDataSeries ds = new XYDataSeries(); ds.Label = "Minimum"; ds.ValueBinding = new Binding("TMin"); ds.XValueBinding = new Binding("DateTime"); ds.SymbolStyle = ss; chart.Data.Children.Add(ds); ds = new XYDataSeries(); ds.Label = "Maximum"; ds.ValueBinding = new Binding("TMax"); ds.XValueBinding = new Binding("DateTime"); ds.SymbolStyle = ss; chart.Data.Children.Add(ds); //ds = new XYDataSeries(); ds.Label = "Average"; //ds.ValueBinding = new Binding("TAvg"); //ds.XValueBinding = new Binding("DateTime"); //ds.SymbolStyle = ss; //chart.Data.Children.Add(ds); chart.View.AxisX.Min = wdata[0].DateTime.ToOADate(); chart.View.AxisX.Max = wdata[len - 1].DateTime.ToOADate(); chart.View.AxisY.Min = min; chart.View.AxisY.Max = max; chart.EndUpdate(); } WaitAndDisableAnimation(); }