//Main code for creating chart. //Note: the argument chartIndex is unused because this demo only has 1 chart. public void createChart(WinChartViewer viewer, int chartIndex) { // // This example demonstrates creating a histogram with a bell curve from raw data. About // half of the code is to sort the raw data into slots and to generate the points on the // bell curve. The remaining half of the code is the actual charting code. // // Generate a random guassian distributed data series as the input data for this // example. RanSeries r = new RanSeries(66); double[] samples = r.getGaussianSeries(200, 100, 10); // // Classify the numbers into slots. In this example, the slot width is 5 units. // int slotSize = 5; // Compute the min and max values, and extend them to the slot boundary. ArrayMath m = new ArrayMath(samples); double minX = Math.Floor(m.min() / slotSize) * slotSize; double maxX = Math.Floor(m.max() / slotSize) * slotSize + slotSize; // We can now determine the number of slots int slotCount = (int)((maxX - minX + 0.5) / slotSize); double[] frequency = new double[slotCount]; // Count the data points contained in each slot for (int i = 0; i < samples.Length; ++i) { int slotIndex = (int)((samples[i] - minX) / slotSize); frequency[slotIndex] = frequency[slotIndex] + 1; } // // Compute Normal Distribution Curve // // The mean and standard deviation of the data double mean = m.avg(); double stdDev = m.stdDev(); // The normal distribution curve (bell curve) is a standard statistics curve. We need to // vertically scale it to make it proportion to the frequency count. double scaleFactor = slotSize * samples.Length / stdDev / Math.Sqrt(6.2832); // In this example, we plot the bell curve up to 3 standard deviations. double stdDevWidth = 3.0; // We generate 4 points per standard deviation to be joined with a spline curve. int bellCurveResolution = (int)(stdDevWidth * 4 + 1); double[] bellCurve = new double[bellCurveResolution]; for (int i = 0; i < bellCurveResolution; ++i) { double z = 2 * i * stdDevWidth / (bellCurveResolution - 1) - stdDevWidth; bellCurve[i] = Math.Exp(-z * z / 2) * scaleFactor; } // // At this stage, we have obtained all data and can plot the chart. // // Create a XYChart object of size 600 x 360 pixels XYChart c = new XYChart(600, 360); // Set the plotarea at (50, 30) and of size 500 x 300 pixels, with transparent // background and border and light grey (0xcccccc) horizontal grid lines c.setPlotArea(50, 30, 500, 300, Chart.Transparent, -1, Chart.Transparent, 0xcccccc); // Display the mean and standard deviation on the chart c.addTitle("Mean = " + c.formatValue(mean, "{value|1}") + ", Standard Deviation = " + c.formatValue(stdDev, "{value|2}"), "Arial"); // Set the x and y axis label font to 12pt Arial c.xAxis().setLabelStyle("Arial", 12); c.yAxis().setLabelStyle("Arial", 12); // Set the x and y axis stems to transparent, and the x-axis tick color to grey // (0x888888) c.xAxis().setColors(Chart.Transparent, Chart.TextColor, Chart.TextColor, 0x888888); c.yAxis().setColors(Chart.Transparent); // Draw the bell curve as a spline layer in red (0xdd0000) with 2-pixel line width SplineLayer bellLayer = c.addSplineLayer(bellCurve, 0xdd0000); bellLayer.setXData2(mean - stdDevWidth * stdDev, mean + stdDevWidth * stdDev); bellLayer.setLineWidth(2); // No tooltip is needed for the spline layer bellLayer.setHTMLImageMap("{disable}"); // Draw the histogram as bars in blue (0x6699bb) with dark blue (0x336688) border BarLayer histogramLayer = c.addBarLayer(frequency, 0x6699bb); histogramLayer.setBorderColor(0x336688); // The center of the bars span from minX + half_bar_width to maxX - half_bar_width histogramLayer.setXData2(minX + slotSize / 2.0, maxX - slotSize / 2.0); // Configure the bars to touch each other with no gap in between histogramLayer.setBarGap(Chart.TouchBar); // Use rounded corners for decoration histogramLayer.setRoundedCorners(); // Tool tip for the histogram histogramLayer.setHTMLImageMap("", "", "title='{value}'"); // ChartDirector by default will extend the x-axis scale by 0.5 unit to cater for the // bar width. It is because a bar plotted at x actually occupies (x +/- half_bar_width), // and the bar width is normally 1 for label based x-axis. However, this chart is using // a linear x-axis instead of label based. So we disable the automatic extension and add // a dummy layer to extend the x-axis scale to cover minX to maxX. c.xAxis().setIndent(false); c.addLineLayer2().setXData(minX, maxX); // For the automatic y-axis labels, set the minimum spacing to 40 pixels. c.yAxis().setTickDensity(40); // Output the chart viewer.Chart = c; // Include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable"); }
//Main code for creating chart. //Note: the argument chartIndex is unused because this demo only has 1 chart. public void createChart(WPFChartViewer viewer, int chartIndex) { // The data for the upper and lower bounding lines double[] upperY = { 60, 60, 100, 100, 60, 60 }; double[] lowerY = { 40, 40, 80, 80, 40, 40 }; double[] zoneX = { 0, 2.5, 3.5, 5.5, 6.5, 10 }; // The data for the spline curve double[] curveY = { 50, 44, 54, 48, 58, 50, 90, 85, 104, 82, 96, 90, 74, 52, 35, 58, 46, 54, 48, 52, 50 }; double[] curveX = { 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10 }; // Create a XYChart object of size 600 x 300 pixels, with a light grey (cccccc) // background, black border, and 1 pixel 3D border effect. XYChart c = new XYChart(600, 300, 0xcccccc, 0x000000, 1); // Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white background. // Turn on both horizontal and vertical grid lines with light grey color (cccccc) c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc); // Add a legend box at (55, 32) (top of the chart) with horizontal layout. Use 9pt Arial // Bold font. Set the background and border color to Transparent. c.addLegend(55, 32, false, "Arial Bold", 9).setBackground(Chart.Transparent); // Add a title box to the chart using 15pt Times Bold Italic font. The title is in CDML // and includes embedded images for highlight. The text is white (ffffff) on a black // background, with a 1 pixel 3D border. c.addTitle( "<*block,valign=absmiddle*><*img=star.png*><*img=star.png*> Performance Enhancer " + "<*img=star.png*><*img=star.png*><*/*>", "Times New Roman Bold Italic", 15, 0xffffff ).setBackground(0x000000, -1, 1); // Add a title to the y axis c.yAxis().setTitle("Temperature"); // Add a title to the x axis using CMDL c.xAxis().setTitle( "<*block,valign=absmiddle*><*img=clock.png*> Elapsed Time (hour)<*/*>"); // Set the axes width to 2 pixels c.xAxis().setWidth(2); c.yAxis().setWidth(2); // Add a purple (800080) spline layer to the chart with a line width of 2 pixels SplineLayer splineLayer = c.addSplineLayer(curveY, 0x800080, "Molecular Temperature"); splineLayer.setXData(curveX); splineLayer.setLineWidth(2); // Add a line layer to the chart with two dark green (338033) data sets, and a line // width of 2 pixels LineLayer lineLayer = c.addLineLayer2(); lineLayer.addDataSet(upperY, 0x338033, "Target Zone"); lineLayer.addDataSet(lowerY, 0x338033); lineLayer.setXData(zoneX); lineLayer.setLineWidth(2); // Color the zone between the upper zone line and lower zone line as semi-transparent // light green (8099ff99) c.addInterLineLayer(lineLayer.getLine(0), lineLayer.getLine(1), unchecked ((int)0x8099ff99), unchecked ((int)0x8099ff99)); // If the spline line gets above the upper zone line, color to area between the lines // red (ff0000) c.addInterLineLayer(splineLayer.getLine(0), lineLayer.getLine(0), 0xff0000, Chart.Transparent); // If the spline line gets below the lower zone line, color to area between the lines // blue (0000ff) c.addInterLineLayer(splineLayer.getLine(0), lineLayer.getLine(1), Chart.Transparent, 0x0000ff); // Add a custom CDML text at the bottom right of the plot area as the logo c.addText(575, 250, "<*block,valign=absmiddle*><*img=small_molecule.png*> <*block*><*font=Times New " + "Roman Bold Italic,size=10,color=804040*>Molecular\nEngineering<*/*>").setAlignment( Chart.BottomRight); // Output the chart viewer.Chart = c; //include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", "title='Temperature at hour {x}: {value} C'"); }
//Main code for creating chart. //Note: the argument chartIndex is unused because this demo only has 1 chart. public void createChart(WinChartViewer viewer, int chartIndex) { // The data for the chart double[] data0 = { 32, 39, 23, 28, 41, 38, 26, 35, 29 }; double[] data1 = { 50, 55, 47, 34, 47, 53, 38, 40, 51 }; // The labels for the chart string[] labels = { "0", "1", "2", "3", "4", "5", "6", "7", "8" }; // Create a XYChart object of size 600 x 300 pixels, with a pale red (ffdddd) // background, black border, 1 pixel 3D border effect and rounded corners. XYChart c = new XYChart(600, 300, 0xffdddd, 0x000000, 1); c.setRoundedFrame(); // Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white (ffffff) // background. Set horizontal and vertical grid lines to grey (cccccc). c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc); // Add a legend box at (55, 32) (top of the chart) with horizontal layout. Use 9pt Arial // Bold font. Set the background and border color to Transparent. c.addLegend(55, 32, false, "Arial Bold", 9).setBackground(Chart.Transparent); // Add a title box to the chart using 15pt Times Bold Italic font. The title is in CDML // and includes embedded images for highlight. The text is white (ffffff) on a dark red // (880000) background, with soft lighting effect from the right side. c.addTitle( "<*block,valign=absmiddle*><*img=@/images/star.png*><*img=@/images/star.png*> " + "Performance Enhancer <*img=@/images/star.png*><*img=@/images/star.png*><*/*>", "Times New Roman Bold Italic", 15, 0xffffff).setBackground(0x880000, -1, Chart.softLighting(Chart.Right)); // Add a title to the y axis c.yAxis().setTitle("Energy Concentration (KJ per liter)"); // Set the labels on the x axis c.xAxis().setLabels(labels); // Add a title to the x axis using CMDL c.xAxis().setTitle( "<*block,valign=absmiddle*><*img=@/images/clock.png*> Elapsed Time (hour)<*/*>"); // Set the axes width to 2 pixels c.xAxis().setWidth(2); c.yAxis().setWidth(2); // Add a spline layer to the chart SplineLayer layer = c.addSplineLayer(); // Set the default line width to 2 pixels layer.setLineWidth(2); // Add a data set to the spline layer, using blue (0000c0) as the line color, with // yellow (ffff00) circle symbols. layer.addDataSet(data1, 0x0000c0, "Target Group").setDataSymbol(Chart.CircleSymbol, 9, 0xffff00); // Add a data set to the spline layer, using brown (982810) as the line color, with pink // (f040f0) diamond symbols. layer.addDataSet(data0, 0x982810, "Control Group").setDataSymbol(Chart.DiamondSymbol, 11, 0xf040f0); // Add a custom CDML text at the bottom right of the plot area as the logo c.addText(575, 250, "<*block,valign=absmiddle*><*img=@/images/small_molecule.png*> <*block*>" + "<*font=Times New Roman Bold Italic,size=10,color=804040*>Molecular\nEngineering" + "<*/*>").setAlignment(Chart.BottomRight); // Output the chart viewer.Chart = c; //include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", "title='{dataSetName} at t = {xLabel} hour: {value} KJ/liter'"); }
//Main code for creating chart. //Note: the argument chartIndex is unused because this demo only has 1 chart. public void createChart(WinChartViewer viewer, int chartIndex) { // The data for the line chart double[] data0 = { 70, 73, 80, 90, 95, 93, 82, 77, 82, 101, 111, 115 }; double[] data1 = { 90, 96, 89, 77, 82, 96, 109, 109, 99, 108, 96, 91 }; double[] data2 = { 58, 34, 25, 49, 64, 10, 16, 40, 25, 49, 40, 22 }; // The labels for the line chart string[] labels = { "2008-01", "2008-02", "2008-03", "2008-04", "2008-05", "2008-06", "2008-07", "2008-08", "2008-09", "2008-10", "2008-11", "2008-12" }; // Create a XYChart object of size 450 x 450 pixels XYChart c = new XYChart(450, 450); // Add a title to the chart using 15pt Arial Italic font. ChartDirector.TextBox title = c.addTitle("Inter-line Coloring", "Arial Italic", 15); // Add a legend box where the top-center is anchored to the horizontal center of the // chart, just under the title. Use horizontal layout and 10 points Arial Bold font, and // transparent background and border. Use line style legend key. LegendBox legendBox = c.addLegend(c.getWidth() / 2, title.getHeight(), false, "Arial Bold Italic", 10); legendBox.setBackground(Chart.Transparent, Chart.Transparent); legendBox.setAlignment(Chart.TopCenter); legendBox.setLineStyleKey(); // Tentatively set the plotarea at (70, 65) and of (chart_width - 100) x (chart_height - // 110) in size. Use light grey (c0c0c0) border and horizontal and vertical grid lines. PlotArea plotArea = c.setPlotArea(70, 65, c.getWidth() - 100, c.getHeight() - 110, -1, -1, 0xc0c0c0, 0xc0c0c0, -1); // Add a title to the y axis using 12pt Arial Bold Italic font c.yAxis().setTitle("Axis Title Placeholder", "Arial Bold Italic", 12); // Add a title to the x axis using 12pt Arial Bold Italic font c.xAxis().setTitle("Axis Title Placeholder", "Arial Bold Italic", 12); // Set the axes line width to 3 pixels c.xAxis().setWidth(3); c.yAxis().setWidth(3); // Set the labels on the x axis. c.xAxis().setLabels(labels); // Use 8 points Arial rotated by 90 degrees as the x-axis label font c.xAxis().setLabelStyle("Arial", 8, Chart.TextColor, 90); // Add a spline curve to the chart SplineLayer layer0 = c.addSplineLayer(data0, 0xff0000, "Data Set 0"); layer0.setLineWidth(2); // Add a normal line to the chart LineLayer layer1 = c.addLineLayer(data1, 0x008800, "Data Set 1"); layer1.setLineWidth(2); // Color the region between the above spline curve and normal line. Use the // semi-transparent red (80ff000000) if the spline curve is higher than the normal line, // otherwise use semi-transparent green (80008800) c.addInterLineLayer(layer0.getLine(), layer1.getLine(), unchecked ((int)0x80ff0000), unchecked ((int)0x80008800)); // Add another normal line to the chart LineLayer layer2 = c.addLineLayer(data2, 0x0000ff, "Data Set 2"); layer2.setLineWidth(2); // Add a horizontal mark line to the chart at y = 40 Mark mark = c.yAxis().addMark(40, -1, "Threshold"); mark.setLineWidth(2); // Set the mark line to purple (880088) dash line. Use white (ffffff) for the mark // label. mark.setMarkColor(c.dashLineColor(0x880088), 0xffffff); // Put the mark label at the left side of the mark, with a purple (880088) background. mark.setAlignment(Chart.Left); mark.setBackground(0x880088); // Color the region between the above normal line and mark line. Use the // semi-transparent blue (800000ff) if the normal line is higher than the mark line, // otherwise use semi-transparent purple (80880088) c.addInterLineLayer(layer2.getLine(), mark.getLine(), unchecked ((int)0x800000ff), unchecked ((int)0x80880088)); // Layout the legend box, so we can get its height c.layoutLegend(); // Adjust the plot area size, such that the bounding box (inclusive of axes) is 10 // pixels from the left edge, just under the legend box, 25 pixels from the right edge, // and 10 pixels from the bottom edge. c.packPlotArea(10, legendBox.getTopY() + legendBox.getHeight(), c.getWidth() - 25, c.getHeight() - 10); // After determining the exact plot area position, we may adjust the legend box and the // title positions so that they are centered relative to the plot area (instead of the // chart) legendBox.setPos(plotArea.getLeftX() + (plotArea.getWidth() - legendBox.getWidth()) / 2, legendBox.getTopY()); title.setPos(plotArea.getLeftX() + (plotArea.getWidth() - title.getWidth()) / 2, title.getTopY()); // Output the chart viewer.Chart = c; //include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", "title='{dataSetName} in {xLabel}: {value}'"); }
public void createChartCenter(WinChartViewer viewer, string img) { // The data for the chart //double[] data0; //double[] data1; //double[] data2; //double[] data3; //string[] labels; //int idate; ////double[] data0 = { 185, 176, 135, 144,99, 120, 175, 128, 175, 142, 172, 120, 175, 123, 120, 185, 145, 185, 152, 142, 156, 156, 175, 185, 175, 148, 142 }; ////double[] data1 = { 145, 153, 123, 175, 120, 105, 142, 147, 145, 184, 124, 132, 102, 125, 165, 156, 125, 156, 125, 143, 142, 148, 129, 145, 169, 136, 187 }; ////double[] data2 = { 135, 120, 145, 126, 100, 145, 120, 120, 156, 129, 168, 185, 165, 135, 158, 125, 126, 125, 163, 165, 132, 143, 138, 136, 185, 159, 144 }; ////double[] data3 = { 150, 110, 187, 173, 85, 100, 135, 156, 155, 120, 127, 122, 125, 145, 134, 185, 132, 185, 128, 123, 185, 129, 136, 162, 125, 189, 165 }; //if (_dt_grid != null && _dt_grid.Rows.Count > 0) //{ // idate = _dt_grid.Rows.Count; // data0 = new double[idate]; // data1 = new double[idate]; // data2 = new double[idate]; // data3 = new double[idate]; // labels = new string[idate]; // for (int i = 0; i < idate - 1; i++) // { // data0[i] = Convert.ToDouble(_dt_grid.Rows[i]["F1"].ToString()); // data1[i] = Convert.ToDouble(_dt_grid.Rows[i]["F2"].ToString()); // data2[i] = Convert.ToDouble(_dt_grid.Rows[i]["F3"].ToString()); // data3[i] = Convert.ToDouble(_dt_grid.Rows[i]["F4"].ToString()); // labels[i] = _dt_grid.Rows[i]["DD"].ToString(); // } //} //else return; // The labels for the chart //string[] labels = { "0", "1", "2", "3", "4", "5", "6", "7", "8" // }; // Create a XYChart object of size 600 x 300 pixels, with a pale red // (ffdddd) background, black border, 1 pixel 3D border effect and // rounded corners. XYChart c = new XYChart(viewer.Width, viewer.Height); c.setBorder(10); // c.setRoundedFrame(); // Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white // (ffffff) background. Set horizontal and vertical grid lines to grey // (cccccc). c.setPlotArea(55, 58, c.getWidth() - 110, c.getHeight() - 150, 0xf4f4f4, -1, Chart.Transparent, c.dashLineColor(0xffffff, Chart.Transparent)); // , Chart.Transparent, -1, 0xffffff, 0xffffff // Add a legend box at (55, 32) (top of the chart) with horizontal // layout. Use 9 pts Arial Bold font. Set the background and border color // to Transparent. //c.addLegend(55, 32, false, "Arial Bold", 9).setBackground( // Chart.Transparent); // Add a title box to the chart using 15 pts Times Bold Italic font. The // title is in CDML and includes embedded images for highlight. The text // is white (ffffff) on a dark red (880000) background, with soft // lighting effect from the right side. //c.addTitle( // "<*block,valign=absmiddle*><*img=star.png*><*img=star.png*> " + // "Performance Enhancer <*img=star.png*><*img=star.png*><*/*>", // "Times New Roman Bold Italic", 15, 0xffffff).setBackground(0x880000, // -1, Chart.softLighting(Chart.Right)); // Add a title to the y axis // c.yAxis().setTitle("Energy Concentration (KJ per liter)"); // Set the labels on the x axis c.xAxis().setLabels(labels); // Add a title to the x axis using CMDL //c.xAxis().setTitle( // "<*block,valign=absmiddle*><*img=clock.png*> Elapsed Time (hour)" + // "<*/*>"); c.yAxis().setLinearScale(0, _max_chart + 50); // Set the axes width to 2 pixels c.xAxis().setWidth(2); //c.yAxis().setWidth(2); c.xAxis().setTitle(" (Date) ", "Arial Bold ", 15); c.addLegend(55, 5, false, "Arial Bold", 13).setBackground( Chart.Transparent); // Add a spline layer to the chart c.yAxis().setLabelStyle("Calibri Bold", 12); c.xAxis().setLabelStyle("Calibri Bold", 11); c.yAxis().setWidth(2); c.setNumberFormat(','); SplineLayer layer = c.addSplineLayer(); // Set the default line width to 2 pixels layer.setLineWidth(5); // Add a data set to the spline layer, using blue (0000c0) as the line // color, with yellow (ffff00) circle symbols. layer.addDataSet(data0, 0x0000c0, "Fatory 1").setDataSymbol( Chart.NoShape, 20, 0xffff00); // Add a data set to the spline layer, using brown (982810) as the line // color, with pink (f040f0) diamond symbols. layer.addDataSet(data1, 0x982810, "Fatory 2").setDataSymbol( Chart.NoShape, 20, 0xf040f0); layer.addDataSet(data2, 0xdb6e25, "Fatory 3").setDataSymbol( Chart.NoShape, 20, 0x0050f0); layer.addDataSet(data3, 0x004000, "Fatory 4").setDataSymbol( Chart.NoShape, 20, 0xf04000); // Add a custom CDML text at the bottom right of the plot area as the // logo //c.addText(575, 250, // "<*block,valign=absmiddle*><*img=small_molecule.png*> <*block*>" + // "<*font=Times New Roman Bold Italic,size=10,color=804040*>" + // "Molecular\nEngineering<*/*>").setAlignment(Chart.BottomRight); // Output the chart viewer.Chart = c; //include tool tip for the chart //viewer.ImageMap = c.getHTMLImageMap("clickable", "", // "title='{dataSetName} at t = {xLabel} hour: {value} KJ/liter'"); }