public void InitDataToChart() { //图例 legend = new Legend(); legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Left); legend.VerticalEdgePlacement = Legend.Placement.Inside; legend.HorizontalEdgePlacement = Legend.Placement.Outside; legend.YOffset = -5; legend.BorderStyle = LegendBase.BorderType.Line; legend.NumberItemsHorizontally = 2; legend.Font = new Font(FontFamily.GenericSerif, 8, FontStyle.Regular); legend.AutoScaleText = false; //网格 grid = new Grid(); grid.HorizontalGridType = Grid.GridType.Fine; grid.VerticalGridType = Grid.GridType.Fine; grid.MajorGridPen.Color = Color.Silver; grid.MinorGridPen.Color = Color.Silver; ///////////////////////////////////////////// //直线图 linePlot = new LinePlot(); linePlot.OrdinateData = cart.regressY; linePlot.AbscissaData = xList; linePlot.Color = Color.Orange; linePlot.Pen.Width = 2.0f; //点图 Marker marker = new Marker(Marker.MarkerType.FilledCircle, 3, new Pen(Color.Blue)); marker.FillBrush = new SolidBrush(Color.RoyalBlue); pointPlot = new PointPlot(marker); pointPlot.AbscissaData = xList; pointPlot.OrdinateData = yList; pointPlot.ShowInLegend = false; if(cart.regressXYB>0) linePlot.Label = yLabel + "=" + cart.regressXYA.ToString("F2") + "*" + xLabel + "+" + cart.regressXYB.ToString("F2") + ",R=" + cart.correlationXY.ToString("F2"); else linePlot.Label = yLabel + "=" + cart.regressXYA.ToString("F2") + "*" + xLabel + cart.regressXYB.ToString("F2") + ",R=" + cart.correlationXY; label1.Text = xLabel + "(m:" + cart.xMean.ToString("F1") + ",s':" + cart.xVar.ToString("F1") + ") " + yLabel + "(m:" + cart.yMean.ToString("F1") + ",s':" + cart.yVar.ToString("F1") + ")"; //添加 chart.Add(grid); chart.Add(linePlot); chart.Add(pointPlot); //设置属性 chart.XAxis1.Label = xLabel+":"+xUnit; chart.YAxis1.Label = yLabel+":"+yUnit; chart.YAxis1.LabelOffsetAbsolute = true; chart.Padding = 5; chart.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalGuideline()); chart.AddAxesConstraint(new AxesConstraint.AxisPosition(PlotSurface2D.YAxisPosition.Left, 60)); chart.PlotBackColor = Color.White; chart.BackColor = System.Drawing.SystemColors.Control; chart.XAxis1.Color = Color.Black; chart.YAxis1.Color = Color.Black; chart.Legend = legend; chart.LegendZOrder = 1; chart.Refresh(); }
public void PlotParticles() { string lines = "Particles Example. Demonstrates - * How to chart multiple data sets against multiple axes at the same time."; infoBox.Text = lines; plotSurface.Clear(); Grid mygrid = new Grid(); mygrid.HorizontalGridType = Grid.GridType.Fine; mygrid.VerticalGridType = Grid.GridType.Fine; plotSurface.Add( mygrid ); // in this example we synthetize a particle distribution // in the x-x' phase space and plot it, with the rms Twiss // ellipse and desnity distribution const int Particle_Number = 500; float [] x = new float[Particle_Number]; float [] y = new float[Particle_Number]; // Twiss parameters for the beam ellipse // 5 mm mrad max emittance, 1 mm beta function float alpha, beta, gamma, emit; alpha = -2.0f; beta = 1.0f; gamma = (1.0f + alpha * alpha) / beta; emit = 4.0f; float da, xmax, xpmax; da = -alpha / gamma; xmax = (float)Math.Sqrt(emit / gamma); xpmax = (float)Math.Sqrt(emit * gamma); Random rand = new Random(); // cheap randomizer on the unit circle for (int i = 0; i<Particle_Number; i++) { float r; do { x[i] = (float)(2.0f * rand.NextDouble() - 1.0f); y[i] = (float)(2.0f * rand.NextDouble() - 1.0f); r = (float)Math.Sqrt(x[i] * x[i] + y[i] * y[i]); } while (r > 1.0f); } // transform to the tilted twiss ellipse for (int i =0; i<Particle_Number; ++i) { y[i] *= xpmax; x[i] = x[i] * xmax + y[i] * da; } plotSurface.Title = "Beam Horizontal Phase Space and Twiss ellipse"; PointPlot pp = new PointPlot(); pp.OrdinateData = y; pp.AbscissaData = x; pp.Marker = new Marker(Marker.MarkerType.FilledCircle ,4, new Pen(Color.Blue)); plotSurface.Add(pp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left); // set axes LinearAxis lx = (LinearAxis) plotSurface.XAxis1; lx.Label = "Position - x [mm]"; lx.NumberOfSmallTicks = 2; LinearAxis ly = (LinearAxis) plotSurface.YAxis1; ly.Label = "Divergence - x' [mrad]"; ly.NumberOfSmallTicks = 2; // Draws the rms Twiss ellipse computed from the random data float [] xeli=new float [40]; float [] yeli=new float [40]; float a_rms, b_rms, g_rms, e_rms; Twiss(x, y, out a_rms, out b_rms, out g_rms, out e_rms); TwissEllipse(a_rms, b_rms, g_rms, e_rms, ref xeli, ref yeli); LinePlot lp = new LinePlot(); lp.OrdinateData = yeli; lp.AbscissaData = xeli; plotSurface.Add(lp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left); lp.Pen = new Pen( Color.Red, 2.0f ); // Draws the ellipse containing 100% of the particles // for a uniform distribution in 2D the area is 4 times the rms float [] xeli2 = new float [40]; float [] yeli2 = new float [40]; TwissEllipse(a_rms, b_rms, g_rms, 4.0F * e_rms, ref xeli2, ref yeli2); LinePlot lp2 = new LinePlot(); lp2.OrdinateData = yeli2; lp2.AbscissaData = xeli2; plotSurface.Add( lp2, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left ); Pen p2 = new Pen( Color.Red, 2.0f ); lp2.Pen = p2; // now bin the particle position to create beam density histogram float range, min, max; min = (float)lx.WorldMin; max = (float)lx.WorldMax; range = max - min; const int Nbin = 30; float dx = range / Nbin; float [] xbin = new float[Nbin+1]; float [] xh = new float[Nbin+1]; for (int j=0; j<=Nbin; ++j) { xbin[j] = min + j * range; if (j < Nbin) xh[j] = 0.0F; } for (int i =0; i<Particle_Number; ++i) { if (x[i] >= min && x[i] <= max) { int j; j = Convert.ToInt32(Nbin * (x[i] - min) / range); xh[j] += 1; } } StepPlot sp= new StepPlot(); sp.OrdinateData = xh; sp.AbscissaData = new StartStep( min, range / Nbin ); sp.Center = true; plotSurface.Add(sp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Right); // axis formatting LinearAxis ly2 = (LinearAxis)plotSurface.YAxis2; ly2.WorldMin = 0.0f; ly2.Label = "Beam Density [a.u.]"; ly2.NumberOfSmallTicks = 2; sp.Pen = new Pen( Color.Green, 2 ); plotSurface.XAxis1.LabelOffset = 0; plotSurface.YAxis1.LabelOffset = 0; // Finally, refreshes the plot plotSurface.Refresh(); }
public void PlotLogLog() { string lines ="LogLog Example. Demonstrates - * How to chart data against log axes and linear axes at the same time."; infoBox.Text = lines; // log log plot plotSurface.Clear(); Grid mygrid = new Grid(); mygrid.HorizontalGridType = Grid.GridType.Fine; mygrid.VerticalGridType = Grid.GridType.Fine; plotSurface.Add(mygrid); int npt = 101; float [] x = new float[npt]; float [] y = new float[npt]; float step=0.1f; // plot a power law on the log-log scale for (int i=0; i<npt; ++i) { x[i] = (i+1)*step; y[i] = x[i]*x[i]; } float xmin = x[0]; float xmax = x[npt-1]; float ymin = y[0]; float ymax = y[npt-1]; LinePlot lp = new LinePlot(); lp.OrdinateData = y; lp.AbscissaData = x; lp.Pen = new Pen( Color.Red ); plotSurface.Add( lp ); // axes // x axis LogAxis logax = new LogAxis( plotSurface.XAxis1 ); logax.WorldMin = xmin; logax.WorldMax = xmax; logax.AxisColor = Color.Red; logax.LabelColor = Color.Red; logax.TickTextColor = Color.Red; logax.LargeTickStep = 1.0f; logax.Label = "x"; plotSurface.XAxis1 = logax; // y axis LogAxis logay = new LogAxis( plotSurface.YAxis1 ); logay.WorldMin = ymin; logay.WorldMax = ymax; logay.AxisColor = Color.Red; logay.LabelColor = Color.Red; logay.TickTextColor = Color.Red; logay.LargeTickStep = 1.0f; logay.Label = "x^2"; plotSurface.YAxis1 = logay; LinePlot lp1 = new LinePlot(); lp1.OrdinateData = y; lp1.AbscissaData = x; lp1.Pen = new Pen( Color.Blue ); plotSurface.Add( lp1, PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Right ); // axes // x axis (lin) LinearAxis linx = (LinearAxis) plotSurface.XAxis2; linx.WorldMin = xmin; linx.WorldMax = xmax; linx.AxisColor = Color.Blue; linx.LabelColor = Color.Blue; linx.TickTextColor = Color.Blue; linx.Label = "x"; plotSurface.XAxis2 = linx; // y axis (lin) LinearAxis liny = (LinearAxis) plotSurface.YAxis2; liny.WorldMin = ymin; liny.WorldMax = ymax; liny.AxisColor = Color.Blue; liny.LabelColor = Color.Blue; liny.TickTextColor = Color.Blue; liny.Label = "x^2"; plotSurface.YAxis2 = liny; plotSurface.Title = "x^2 plotted with log(red)/linear(blue) axes"; plotSurface.XAxis1.LabelOffset = 0; plotSurface.YAxis1.LabelOffset = 0; plotSurface.Refresh(); }
public void PlotMockup() { string lines ="THE TEST (can your charting library handle this?) - xuzhenzhen.com.chart demonstrates it can handle real world charting requirements."; infoBox.Text = lines; // first of all, generate some mockup data. DataTable info = new DataTable( "Store Information" ); info.Columns.Add( "Index", typeof(int) ); info.Columns.Add( "IndexOffsetLeft", typeof(float) ); info.Columns.Add( "IndexOffsetRight", typeof(float) ); info.Columns.Add( "StoreName", typeof(string) ); info.Columns.Add( "BarBase", typeof(float) ); info.Columns.Add( "StoreGrowth", typeof(float) ); info.Columns.Add( "AverageGrowth", typeof(float) ); info.Columns.Add( "ProjectedSales", typeof(float) ); float barBase = 185.0f; Random r = new Random(); for (int i=0; i<18; ++i) { DataRow row = info.NewRow(); row["Index"] = i; row["IndexOffsetLeft"] = (float)i - 0.1f; row["IndexOffsetRight"] = (float)i + 0.1f; row["StoreName"] = "Store " + (i+1).ToString(); row["BarBase"] = barBase; row["StoreGrowth"] = barBase + ( (r.NextDouble() - 0.1) * 20.0f ); row["AverageGrowth"] = barBase + ( (r.NextDouble() - 0.1) * 15.0f ); row["ProjectedSales"] = barBase + ( r.NextDouble() * 15.0f ); info.Rows.Add( row ); barBase += (float)r.NextDouble() * 4.0f; } plotSurface.Clear(); // generate the grid Grid grid = new Grid(); grid.VerticalGridType = Grid.GridType.Coarse; grid.HorizontalGridType = Grid.GridType.None; grid.MajorGridPen = new Pen( Color.Black, 1.0f ); plotSurface.Add( grid ); // generate the trendline LinePlot trendline = new LinePlot(); trendline.DataSource = info; trendline.AbscissaData = "Index"; trendline.OrdinateData = "BarBase"; trendline.Pen = new Pen( Color.Black, 3.0f ); trendline.Label = "Trendline"; plotSurface.Add( trendline ); // draw store growth bars BarPlot storeGrowth = new BarPlot(); storeGrowth.DataSource = info; storeGrowth.AbscissaData = "IndexOffsetLeft"; storeGrowth.OrdinateDataTop = "StoreGrowth"; storeGrowth.OrdinateDataBottom = "BarBase"; storeGrowth.Label = "Store Growth"; storeGrowth.FillBrush = xuzhenzhen.com.chart.RectangleBrushes.Solid.Black; //storeGrowth.BorderPen = new Pen( Color.Black, 2.0f ); plotSurface.Add( storeGrowth ); // draw average growth bars BarPlot averageGrowth = new BarPlot(); averageGrowth.DataSource = info; averageGrowth.AbscissaData = "IndexOffsetRight"; averageGrowth.OrdinateDataBottom = "BarBase"; averageGrowth.OrdinateDataTop = "AverageGrowth"; averageGrowth.Label = "Average Growth"; averageGrowth.FillBrush = xuzhenzhen.com.chart.RectangleBrushes.Solid.Gray; //averageGrowth.BorderPen = new Pen( Color.Black, 2.0f ); plotSurface.Add( averageGrowth ); // generate the projected sales step line. StepPlot projected = new StepPlot(); projected.DataSource = info; projected.AbscissaData = "Index"; projected.OrdinateData = "ProjectedSales"; projected.Pen = new Pen( Color.Orange, 3.0f ); projected.HideVerticalSegments = true; projected.Center = true; projected.Label = "Projected Sales"; projected.WidthScale = 0.7f; plotSurface.Add( projected ); // generate the minimum target line. HorizontalLine minimumTargetLine = new HorizontalLine( 218, new Pen( Color.Green, 3.5f ) ); minimumTargetLine.Label = "Minimum Target"; minimumTargetLine.LengthScale = 0.98f; minimumTargetLine.ShowInLegend = true; // off by default for lines. plotSurface.Add( minimumTargetLine ); // generate the preferred target line. HorizontalLine preferredTargetLine = new HorizontalLine( 228, new Pen( Color.Blue, 3.5f ) ); preferredTargetLine.Label = "Preferred Target"; preferredTargetLine.LengthScale = 0.98f; preferredTargetLine.ShowInLegend = true; // off by default for lines. plotSurface.Add( preferredTargetLine ); // make some modifications so that chart matches requirements. // y axis. plotSurface.YAxis1.TicksIndependentOfPhysicalExtent = true; plotSurface.YAxis1.TickTextNextToAxis = false; plotSurface.YAxis1.TicksAngle = 3.0f * (float)Math.PI / 2.0f; ((LinearAxis)plotSurface.YAxis1).LargeTickStep = 10.0; ((LinearAxis)plotSurface.YAxis1).NumberOfSmallTicks = 0; // x axis plotSurface.XAxis1.TicksIndependentOfPhysicalExtent = true; plotSurface.XAxis1.TickTextNextToAxis = false; plotSurface.XAxis1.TicksAngle = (float)Math.PI / 2.0f; LabelAxis la = new LabelAxis( plotSurface.XAxis1 ); for (int i=0; i<info.Rows.Count; ++i) { la.AddLabel( (string)info.Rows[i]["StoreName"], Convert.ToInt32(info.Rows[i]["Index"]) ); } la.TicksLabelAngle = (float)90.0f; la.TicksBetweenText = true; plotSurface.XAxis1 = la; plotSurface.XAxis2 = (Axis)plotSurface.XAxis1.Clone(); plotSurface.XAxis2.HideTickText = true; plotSurface.XAxis2.LargeTickSize = 0; Legend l = new Legend(); l.NumberItemsVertically = 2; l.AttachTo( xuzhenzhen.com.chart.PlotSurface2D.XAxisPosition.Bottom, xuzhenzhen.com.chart.PlotSurface2D.YAxisPosition.Left ); l.HorizontalEdgePlacement = xuzhenzhen.com.chart.Legend.Placement.Outside; l.VerticalEdgePlacement = xuzhenzhen.com.chart.Legend.Placement.Inside; l.XOffset = 5; l.YOffset = 50; l.BorderStyle = xuzhenzhen.com.chart.LegendBase.BorderType.Line; plotSurface.Legend = l; plotSurface.Title = "Sales Growth Compared to\n" + "Average Sales Growth by Store Size - Rank Order Low to High"; plotSurface.XAxis1.LabelOffset = 0; plotSurface.YAxis1.LabelOffset = 0; plotSurface.Refresh(); }
public void PlotLogAxis() { string lines = "Log Example. Demonstrates - * How to chart data against log axes and linear axes at the same time."; infoBox.Text = lines; plotSurface.Clear(); // draw a fine grid. Grid fineGrid = new Grid(); fineGrid.VerticalGridType = Grid.GridType.Fine; fineGrid.HorizontalGridType = Grid.GridType.Fine; plotSurface.Add( fineGrid ); const int npt = 101; float[] x = new float[npt]; float[] y = new float[npt]; float step = 0.1f; for (int i=0; i<npt; ++i) { x[i] = i*step - 5.0f; y[i] = (float)Math.Pow( 10.0, x[i] ); } float xmin = x[0]; float xmax = x[npt-1]; float ymin = (float)Math.Pow( 10.0, xmin ); float ymax = (float)Math.Pow( 10.0, xmax ); LinePlot lp = new LinePlot(); lp.OrdinateData = y; lp.AbscissaData = x; lp.Pen = new Pen( Color.Red ); plotSurface.Add( lp ); LogAxis loga = new LogAxis( plotSurface.YAxis1 ); loga.WorldMin = ymin; loga.WorldMax = ymax; loga.AxisColor = Color.Red; loga.LabelColor = Color.Red; loga.TickTextColor = Color.Red; loga.LargeTickStep = 1.0f; loga.Label = "10^x"; plotSurface.YAxis1 = loga; LinePlot lp1 = new LinePlot(); lp1.OrdinateData = y; lp1.AbscissaData = x; lp1.Pen = new Pen( Color.Blue ); plotSurface.Add( lp1, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Right ); LinearAxis lin = new LinearAxis( plotSurface.YAxis2 ); lin.WorldMin = ymin; lin.WorldMax = ymax; lin.AxisColor = Color.Blue; lin.LabelColor = Color.Blue; lin.TickTextColor = Color.Blue; lin.Label = "10^x"; plotSurface.YAxis2 = lin; LinearAxis lx = (LinearAxis)plotSurface.XAxis1; lx.WorldMin = xmin; lx.WorldMax = xmax; lx.Label = "x"; //((LogAxis)plotSurface.YAxis1).LargeTickStep = 2; plotSurface.Title = "Mixed Linear/Log Axes"; plotSurface.XAxis1.LabelOffset = 0; plotSurface.YAxis1.LabelOffset = 0; plotSurface.Refresh(); }
public void PlotLabelAxis() { string lines = "Internet Usage Example. Demonstrates - * Label Axis with angular text. * RectangleBrushes."; infoBox.Text = lines; plotSurface.Clear(); Grid mygrid = new Grid(); mygrid.VerticalGridType = Grid.GridType.Coarse; Pen majorGridPen = new Pen( Color.LightGray ); float[] pattern = { 1.0f, 2.0f }; mygrid.MajorGridPen = majorGridPen; plotSurface.Add( mygrid ); float[] xs = {20.0f, 31.0f, 27.0f, 38.0f, 24.0f, 3.0f, 2.0f }; float[] xs2 = {7.0f, 10.0f, 42.0f, 9.0f, 2.0f, 79.0f, 70.0f }; float[] xs3 = {1.0f, 20.0f, 20.0f, 25.0f, 10.0f, 30.0f, 30.0f }; HistogramPlot hp = new HistogramPlot(); hp.DataSource = xs; hp.BaseWidth = 0.6f; hp.RectangleBrush = new RectangleBrushes.HorizontalCenterFade( Color.FromArgb(255,255,200), Color.White ); hp.Filled = true; hp.Label = "Developer Work"; HistogramPlot hp2 = new HistogramPlot(); hp2.DataSource = xs2; hp2.Label = "Web Browsing"; hp2.RectangleBrush = RectangleBrushes.Horizontal.FaintGreenFade; hp2.Filled = true; hp2.StackedTo( hp ); HistogramPlot hp3 = new HistogramPlot(); hp3.DataSource = xs3; hp3.Label = "P2P Downloads"; hp3.RectangleBrush = RectangleBrushes.Vertical.FaintBlueFade; hp3.Filled = true; hp3.StackedTo( hp2 ); plotSurface.Add( hp ); plotSurface.Add( hp2 ); plotSurface.Add( hp3 ); plotSurface.Legend = new Legend(); LabelAxis la = new LabelAxis( plotSurface.XAxis1 ); la.AddLabel( "Monday", 0.0f ); la.AddLabel( "Tuesday", 1.0f ); la.AddLabel( "Wednesday", 2.0f ); la.AddLabel( "Thursday", 3.0f ); la.AddLabel( "Friday", 4.0f ); la.AddLabel( "Saturday", 5.0f ); la.AddLabel( "Sunday", 6.0f ); la.Label = "Days"; la.TickTextFont = new Font( "Courier New", 8 ,FontStyle.Regular); la.TicksBetweenText = true; plotSurface.XAxis1 = la; plotSurface.YAxis1.WorldMin = 0.0; plotSurface.YAxis1.Label = "MBytes"; ((LinearAxis)plotSurface.YAxis1).NumberOfSmallTicks = 1; plotSurface.Title = "Internet useage for user:\n johnc 09/01/03 - 09/07/03"; plotSurface.XAxis1.TicksLabelAngle = 30.0f; plotSurface.XAxis1.LabelOffset = 0; plotSurface.YAxis1.LabelOffset = 0; plotSurface.PlotBackBrush = RectangleBrushes.Vertical.FaintRedFade; plotSurface.Refresh(); }
public void PlotWavelet() { string lines = "Wavelet Example. Demonstrates - * Reversing axes, setting number of tick marks on axis explicitly."; infoBox.Text = lines; this.plotSurface.Clear(); // Create a new line plot from array data via the ArrayAdapter class. LinePlot lp = new LinePlot(); lp.DataSource = makeDaub(256); lp.Color = Color.Green; lp.Label = "Daubechies Wavelet"; // no legend, but still useful for copy data to clipboard. Grid myGrid = new Grid(); myGrid.VerticalGridType = Grid.GridType.Fine; myGrid.HorizontalGridType = Grid.GridType.Coarse; this.plotSurface.Add(myGrid); // And add it to the plot surface this.plotSurface.Add( lp ); this.plotSurface.Title = "Reversed / Upside down Daubechies Wavelet"; // Ok, the above will produce a decent default plot, but we would like to change // some of the Y Axis details. First, we'd like lots of small ticks (10) between // large tick values. Secondly, we'd like to draw a grid for the Y values. To do // this, we create a new LinearAxis (we could also use Label, Log etc). Rather than // starting from scratch, we use the constructor that takes an existing axis and // clones it (values in the superclass Axis only are cloned). PlotSurface2D // automatically determines a suitable axis when we add plots to it (merging // current requirements with old requirements), and we use this as our starting // point. Because we didn't specify which Y Axis we are using when we added the // above line plot (there is one on the left - YAxis1 and one on the right - YAxis2) // PlotSurface2D.Add assumed we were using YAxis1. So, we create a new axis based on // YAxis1, update the details we want, then set the YAxis1 to be our updated one. LinearAxis myAxis = new LinearAxis( this.plotSurface.YAxis1 ); myAxis.NumberOfSmallTicks = 2; this.plotSurface.YAxis1 = myAxis; // We would also like to modify the way in which the X Axis is printed. This time, // we'll just modify the relevant PlotSurface2D Axis directly. this.plotSurface.XAxis1.WorldMax = 100.0f; this.plotSurface.PlotBackColor = Color.OldLace; this.plotSurface.XAxis1.Reversed = true; this.plotSurface.YAxis1.Reversed = true; // Force a re-draw of the control. this.plotSurface.Refresh(); }
public void InitDataToChart() { //清空 chart1.Clear(); chart2.Clear(); chart3.Clear(); //垂直线 vline = new VerticalLine(0, Color.Blue); //图例 legend = new Legend(); legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Left); legend.VerticalEdgePlacement = Legend.Placement.Inside; legend.HorizontalEdgePlacement = Legend.Placement.Outside; legend.YOffset = -5; legend.BorderStyle = LegendBase.BorderType.Line; legend.NumberItemsHorizontally = 4; //网格 grid = new Grid(); grid.HorizontalGridType = Grid.GridType.Fine; grid.VerticalGridType = Grid.GridType.Fine; grid.MajorGridPen.Color = Color.Silver; grid.MinorGridPen.Color = Color.Silver; /////区域着色//////// fill = new FilledRegion(new VerticalLine(-1), new VerticalLine(8)); fill.Brush = new SolidBrush(Color.FromArgb(250, 218, 169)); ///////////////////////////////////////////// //直线图 sysPlot = new LinePlot(); sysPlot.OrdinateData = sysList; sysPlot.AbscissaData = timeList; sysPlot.Color = Color.RoyalBlue; sysPlot.Pen.Width = 2.0f; sysPlot.Label = "SYS"; diaPlot = new LinePlot(); diaPlot.OrdinateData = diaList; diaPlot.AbscissaData = timeList; diaPlot.Color = Color.OrangeRed; diaPlot.Pen.Width = 2.0f; diaPlot.Label = "DIA"; mapPlot = new LinePlot(); mapPlot.OrdinateData = mapList; mapPlot.AbscissaData = timeList; mapPlot.Color = Color.Chartreuse; mapPlot.Pen.Width = 2.0f; mapPlot.Label = "MAP"; hrPlot = new LinePlot(); hrPlot.OrdinateData = hrList; hrPlot.AbscissaData = timeList; hrPlot.Color = Color.DarkSlateBlue; hrPlot.Pen.Width = 2.0f; sys_hrPlot = new LinePlot(); sys_hrPlot.OrdinateData = sys_hrList; sys_hrPlot.AbscissaData = timeList; sys_hrPlot.Color = Color.Green; sys_hrPlot.Pen.Width = 2.0f; //水平线 hline1 = new HorizontalLine(70, Color.Gray); hline2 = new HorizontalLine(90, Color.Gray); hline3 = new HorizontalLine(120, Color.Gray); hline4 = new HorizontalLine(140, Color.Gray); /////////////////////// chart1.Add(fill); chart1.Add(grid); chart1.Add(sysPlot); chart1.Add(diaPlot); chart1.Add(mapPlot); chart1.Add(hline1); chart1.Add(hline2); chart1.Add(hline3); chart1.Add(hline4); chart1.Add(vline); chart1.XAxis1.HideTickText = true; chart1.YAxis1.Label = "血压:mmHg"; chart1.YAxis1.LabelOffsetAbsolute = true; chart1.YAxis1.WorldMin = chart1.YAxis1.WorldMin - 20; chart1.YAxis1.WorldMax = chart1.YAxis1.WorldMax + 20; chart1.Padding = 5; chart1.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.HorizontalDrag()); chart1.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalDrag()); chart1.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalGuideline()); chart1.AddAxesConstraint(new AxesConstraint.AxisPosition(PlotSurface2D.YAxisPosition.Left, 60)); chart1.InteractionOccured += new xuzhenzhen.com.chart.Windows.PlotSurface2D.InteractionHandler(chart1_InteractionOccured); chart1.PlotBackColor = Color.White; chart1.BackColor = System.Drawing.SystemColors.Control; chart1.XAxis1.Color = Color.Black; chart1.YAxis1.Color = Color.Black; chart1.Legend = legend; chart1.LegendZOrder = 1; chart1.Refresh(); /////////////////////////// chart2.Add(fill); chart2.Add(grid); chart2.Add(hrPlot); chart2.Add(vline); chart2.XAxis1.HideTickText = true; chart2.YAxis1.Label = "心率:BPM"; chart2.YAxis1.LabelOffsetAbsolute = true; chart2.Padding = 5; chart2.AddAxesConstraint(new AxesConstraint.AxisPosition(PlotSurface2D.YAxisPosition.Left, 60)); chart2.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.HorizontalDrag()); chart2.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalDrag()); chart2.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalGuideline()); chart2.InteractionOccured += new xuzhenzhen.com.chart.Windows.PlotSurface2D.InteractionHandler(chart2_InteractionOccured); chart2.PlotBackColor = Color.White; chart2.BackColor = System.Drawing.SystemColors.Control; chart2.XAxis1.Color = Color.Black; chart2.YAxis1.Color = Color.Black; chart2.Refresh(); /////////////////////////// chart3.Add(fill); chart3.Add(grid); chart3.Add(sys_hrPlot); chart3.Add(vline); LabelAxis axis = new LabelAxis(chart3.XAxis1); int tick = 1; if (chart2.XAxis1.WorldMax - chart2.XAxis1.WorldMin > 30) tick = 2; for (int i = (int)chart2.XAxis1.WorldMin; i <= chart2.XAxis1.WorldMax; i+=tick) { int j = i % 24; if (j < 0) j += 24; axis.AddLabel(Convert.ToString(j), i); } chart3.XAxis1 = axis; chart3.XAxis1.Label = "Time:Hour"; chart3.YAxis1.Label = "SYS*PR/100"; chart3.YAxis1.LabelOffsetAbsolute = true; chart3.Padding = 5; chart3.AddAxesConstraint(new AxesConstraint.AxisPosition(PlotSurface2D.YAxisPosition.Left, 60)); chart3.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.HorizontalDrag()); chart3.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalDrag()); chart3.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalGuideline()); chart3.InteractionOccured += new xuzhenzhen.com.chart.Windows.PlotSurface2D.InteractionHandler(chart3_InteractionOccured); chart3.PlotBackColor = Color.White; chart3.BackColor = System.Drawing.SystemColors.Control; chart3.XAxis1.Color = Color.Black; chart3.YAxis1.Color = Color.Black; chart3.Refresh(); SetStatusNow(); }
public void InitDataToChart() { float min = (float)dataList[0];//最小值 float max = (float)dataList[0];//最大值 for (int i = 1; i < dataList.Count; i++) { if ((float)dataList[i] < min) min = (float)dataList[i]; if ((float)dataList[i] > max) max = (float)dataList[i]; } int start = (int)(min / 10) * 10;//x轴的起始值 int end = (int)Math.Ceiling(max / 10) * 10;//x轴的末尾值 int offset = 10;//x轴的偏移量 int size = (int)Math.Ceiling((float)(end - start) / offset);//计算柱状图中柱体的个数 double[] xValues = new double[size]; double[] yValues = new double[size]; for (int i = 0; i < size; i++) { xValues[i] = start + offset * i; } for (int i = 0; i < dataList.Count; i++) { int index = (int)(((float)dataList[i] - start) / offset); yValues[index]++; } for (int i = 0; i < size; i++) { yValues[i] = yValues[i] / dataList.Count * 100; } /*//图例 legend = new Legend(); legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Left); legend.VerticalEdgePlacement = Legend.Placement.Inside; legend.HorizontalEdgePlacement = Legend.Placement.Outside; legend.YOffset = -5; legend.BorderStyle = LegendBase.BorderType.Line; legend.NumberItemsHorizontally = 2; legend.Font = new Font(FontFamily.GenericSerif, 8, FontStyle.Regular); legend.AutoScaleText = false;*/ //网格 grid = new Grid(); grid.HorizontalGridType = Grid.GridType.Fine; grid.VerticalGridType = Grid.GridType.Fine; grid.MajorGridPen.Color = Color.Silver; grid.MinorGridPen.Color = Color.Silver; ///////////////////////////////////////////// //柱状图 histogramPlot = new HistogramPlot(); histogramPlot.AbscissaData = xValues; histogramPlot.OrdinateData = yValues; histogramPlot.RectangleBrush = new RectangleBrushes.Solid(Color.Orange); histogramPlot.Filled = true; histogramPlot.BaseWidth = 0.25f; //添加 chart.Add(grid); chart.Add(histogramPlot); // chart.XAxis1.Label = xLabel; chart.XAxis1.TicksCrossAxis = true; chart.YAxis1.Label = "%"; chart.YAxis1.WorldMin = 0; chart.YAxis1.LabelOffsetAbsolute = true; chart.Padding = 5; chart.AddInteraction(new xuzhenzhen.com.chart.Windows.PlotSurface2D.Interactions.VerticalGuideline()); chart.AddAxesConstraint(new AxesConstraint.AxisPosition(PlotSurface2D.YAxisPosition.Left, 60)); // chart.PlotBackColor = Color.White; chart.BackColor = System.Drawing.SystemColors.Control; chart.XAxis1.Color = Color.Black; chart.YAxis1.Color = Color.Black; //chart.Legend = legend; chart.LegendZOrder = 1; chart.Refresh(); }