//Main code for creating chart. //Note: the argument img is unused because this demo only has 1 chart. public void createChart(WinChartViewer viewer, string img) { // The data for the bar chart double[] data = { 3.9, 8.1, 10.9, 14.2, 18.1, 19.0, 21.2, 23.2, 25.7, 36 }; // The labels for the bar chart string[] labels = { "Bastic Group", "Simpa", "YG Super", "CID", "Giga Tech", "Indo Digital", "Supreme", "Electech","THP Thunder", "Flash Light" }; // Create a XYChart object of size 600 x 250 pixels XYChart c = new XYChart(600, 250); // Add a title to the chart using Arial Bold Italic font c.addTitle("Revenue Estimation - Year 2002", "Arial Bold Italic"); // Set the plotarea at (100, 30) and of size 400 x 200 pixels. Set the // plotarea border, background and grid lines to Transparent c.setPlotArea(100, 30, 400, 200, Chart.Transparent, Chart.Transparent, Chart.Transparent, Chart.Transparent, Chart.Transparent); // Add a bar chart layer using the given data. Use a gradient color for // the bars, where the gradient is from dark green (0x008000) to white // (0xffffff) BarLayer layer = c.addBarLayer(data, c.gradientColor(100, 0, 500, 0, 0x008000, 0xffffff)); // Swap the axis so that the bars are drawn horizontally c.swapXY(true); // Set the bar gap to 10% layer.setBarGap(0.1); // Use the format "US$ xxx millions" as the bar label layer.setAggregateLabelFormat("US$ {value} millions"); // Set the bar label font to 10 pts Times Bold Italic/dark red (0x663300) layer.setAggregateLabelStyle("Times New Roman Bold Italic", 10, 0x663300) ; // Set the labels on the x axis ChartDirector.TextBox textbox = c.xAxis().setLabels(labels); // Set the x axis label font to 10pt Arial Bold Italic textbox.setFontStyle("Arial Bold Italic"); textbox.setFontSize(10); // Set the x axis to Transparent, with labels in dark red (0x663300) c.xAxis().setColors(Chart.Transparent, 0x663300); // Set the y axis and labels to Transparent c.yAxis().setColors(Chart.Transparent, Chart.Transparent); // Output the chart viewer.Image = c.makeImage(); //include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", "title='{xLabel}: US${value} millions'"); }
//Main code for creating chart. //Note: the argument img is unused because this demo only has 1 chart. public void createChart(WinChartViewer viewer, string img) { // The age groups string[] labels = { "0 - 4", "5 - 9", "10 - 14", "15 - 19", "20 - 24", "24 - 29", "30 - 34", "35 - 39", "40 - 44", "44 - 49","50 - 54", "55 - 59", "60 - 64", "65 - 69", "70 - 74", "75 - 79","80+" }; // The male population (in thousands) double[] male = { 215, 238, 225, 236, 235, 260, 286, 340, 363, 305, 259, 164, 135, 127, 102, 68, 66 }; // The female population (in thousands) double[] female = { 194, 203, 201, 220, 228, 271, 339, 401, 384, 304, 236, 137, 116, 122, 112, 85, 110 }; //============================================================= // Draw the right bar chart //============================================================= // Create a XYChart object of size 320 x 300 pixels XYChart c = new XYChart(320, 300); // Set the plotarea at (50, 0) and of size 250 x 255 pixels. Use pink // (0xffdddd) as the background. c.setPlotArea(50, 0, 250, 255, 0xffdddd); // Add a custom text label at the top right corner of the right bar chart c.addText(300, 0, "Female", "Times New Roman Bold Italic", 12, 0xa07070 ).setAlignment(Chart.TopRight); // Add the pink (0xf0c0c0) bar chart layer using the female data BarLayer femaleLayer = c.addBarLayer(female, 0xf0c0c0, "Female"); // Swap the axis so that the bars are drawn horizontally c.swapXY(true); // Set the bar to touch each others femaleLayer.setBarGap(Chart.TouchBar); // Set the border style of the bars to 1 pixel 3D border femaleLayer.setBorderColor(-1, 1); // Add a Transparent line layer to the chart using the male data. As it // is Transparent, only the female bar chart can be seen. We need to put // both male and female data in both left and right charts, because we // want auto-scaling to produce the same scale for both chart. c.addLineLayer(male, Chart.Transparent); // Set the y axis label font to Arial Bold c.yAxis().setLabelStyle("Arial Bold"); // Set the labels between the two bar charts, which can be considered as // the x-axis labels for the right chart ChartDirector.TextBox tb = c.xAxis().setLabels(labels); // Use a fix width of 50 for the labels (height = automatic) with center // alignment tb.setSize(50, 0); tb.setAlignment(Chart.Center); // Set the label font to Arial Bold tb.setFontStyle("Arial Bold"); // Disable ticks on the x-axis by setting the tick length to 0 c.xAxis().setTickLength(0); //============================================================= // Draw the left bar chart //============================================================= // Create a XYChart object of size 280 x 300 pixels with a transparent // background. XYChart c2 = new XYChart(280, 300, Chart.Transparent); // Set the plotarea at (20, 0) and of size 250 x 255 pixels. Use pale // blue (0xddddff) as the background. c2.setPlotArea(20, 0, 250, 255, 0xddddff); // Add a custom text label at the top left corner of the left bar chart c2.addText(20, 0, "Male", "Times New Roman Bold Italic", 12, 0x7070a0); // Add the pale blue (0xaaaaff) bar chart layer using the male data BarLayer maleLayer = c2.addBarLayer(male, 0xaaaaff, "Male"); // Swap the axis so that the bars are drawn horizontally c2.swapXY(true); // Reverse the direction of the y-axis so it runs from right to left c2.yAxis().setReverse(); // Set the bar to touch each others maleLayer.setBarGap(Chart.TouchBar); // Set the border style of the bars to 1 pixel 3D border maleLayer.setBorderColor(-1, 1); // Add a Transparent line layer to the chart using the female data. As it // is Transparent, only the male bar chart can be seen. We need to put // both male and female data in both left and right charts, because we // want auto-scaling to produce the same scale for both chart. c2.addLineLayer(female, Chart.Transparent); // Set the y axis label font to Arial Bold c2.yAxis().setLabelStyle("Arial Bold"); // Set the x-axis labels for tool tip purposes. c2.xAxis().setLabels(labels); // Hide the x-axis labels by setting them to Transparent. We only need to // display the x-axis labels for the right chart. c2.xAxis().setColors(0x000000, Chart.Transparent, -1, Chart.Transparent); //============================================================= // Use a MultiChart to contain both bar charts //============================================================= // Create a MultiChart object of size 590 x 320 pixels. MultiChart m = new MultiChart(590, 320); // Add a title to the chart using Arial Bold Italic font m.addTitle("Demographics Hong Kong Year 2002", "Arial Bold Italic"); // Add another title at the bottom using Arial Bold Italic font m.addTitle2(Chart.Bottom, "Population (in thousands)", "Arial Bold Italic", 10); // Put the right chart at (270, 25) m.addChart(270, 25, c); // Put the left chart at (0, 25) m.addChart(0, 25, c2); // Output the chart viewer.Image = m.makeImage(); //include tool tip for the chart viewer.ImageMap = m.getHTMLImageMap("clickable", "", "title='{dataSetName} (Age {xLabel}): Population {value}K'"); }
//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 line chart double[] data0 = { 410, 420, 500, 590 }; double[] data1 = { 500, 370, 680, 850 }; string[] labels = { "Q1", "Q2", "Q3", "Q4" }; // Create a XYChart object of size 600 x 400 pixels XYChart c = new XYChart(600, 400); // Add a title to the chart using 18pt Times Bold Italic font ChartDirector.TextBox title = c.addTitle("Product Line Global Revenue", "Times New Roman Bold Italic", 18); // Tentatively set the plotarea at (50, 55) and of (chart_width - 100) x (chart_height - // 150) pixels in size. Use a vertical gradient color from sky blue (aaccff) t0 light // blue (f9f9ff) as background. Set both horizontal and vertical grid lines to dotted // semi-transprent black (aa000000). PlotArea plotArea = c.setPlotArea(50, 55, c.getWidth() - 100, c.getHeight() - 150, c.linearGradientColor(0, 55, 0, 55 + c.getHeight() - 150, 0xaaccff, 0xf9fcff), -1, -1, c.dashLineColor(unchecked ((int)0xaa000000), Chart.DotLine), -1); // Set y-axis title using 12 points Arial Bold Italic font, and set its position 10 // pixels from the axis. c.yAxis().setTitle("Revenue (USD millions)", "Arial Bold Italic", 12); c.yAxis().setTitlePos(Chart.Left, 10); // Set y-axis label style to 10 points Arial Bold and axis color to transparent c.yAxis().setLabelStyle("Arial Bold", 10); c.yAxis().setColors(Chart.Transparent); // Set y-axis tick density to 30 pixels. ChartDirector auto-scaling will use this as the // guideline when putting ticks on the y-axis. c.yAxis().setTickDensity(30); // Add a bar layer to the chart with side layout BarLayer layer = c.addBarLayer2(Chart.Side); // Add two data sets to the bar layer layer.addDataSet(data0, 0xff6600, "FY 2007"); layer.addDataSet(data1, 0x0088ff, "FY 2008"); // Use soft lighting effect with light direction from the left layer.setBorderColor(Chart.Transparent, Chart.softLighting(Chart.Left)); // Set the x axis labels c.xAxis().setLabels(labels); // Convert the labels on the x-axis to a CDMLTable CDMLTable table = c.xAxis().makeLabelTable(); // Set the default left/right margins to 5 pixels and top/bottom margins to 3 pixels. // Set the default font size to 10 points ChartDirector.TextBox cellStyle = table.getStyle(); cellStyle.setMargin2(5, 5, 4, 3); cellStyle.setFontSize(10); // Set the first row to use Arial Bold font, with a light grey (eeeeee) background. ChartDirector.TextBox firstRowStyle = table.getRowStyle(0); firstRowStyle.setFontStyle("Arial Bold"); firstRowStyle.setBackground(0xeeeeee, Chart.LineColor); // // We can add more information to the table. In this sample code, we add the data series // and the legend icons to the table. // // Add 3 more rows to the table. Set the background of the 2nd row to light grey // (eeeeee). table.appendRow(); table.appendRow().setBackground(0xeeeeee, Chart.LineColor); table.appendRow(); // Put the values of the 2 data series in the first 2 rows. Put the percentage // differences in the 3rd row. for (int i = 0; i < data0.Length; ++i) { table.setText(i, 1, (data0[i]).ToString()); table.setText(i, 2, (data1[i]).ToString()); double percentageDiff = 100.0 * (data1[i] - data0[i]) / data0[i]; // Use red or green color depending on whether the difference is positive or // negative string formatString = "<*color=008800*>+{value|1}%"; if (percentageDiff < 0) { formatString = "<*color=cc0000*>{value|1}%"; } table.setText(i, 3, c.formatValue(percentageDiff, formatString)); } // Insert a column on the left for the legend icons using Arial Bold font. table.insertCol(0).setFontStyle("Arial Bold"); // The top cell is set to transparent, so it is invisible table.getCell(0, 0).setBackground(Chart.Transparent, Chart.Transparent); // The next 2 cells are set to the legend icons and names of the 2 data series table.setText(0, 1, layer.getLegendIcon(0) + " FY 2007"); table.setText(0, 2, layer.getLegendIcon(1) + " FY 2008"); // The last cell is set to "Change" table.setText(0, 3, "Change"); // Append a column on the right for the total values. table.appendCol(); // Put "Total" in the top cell as the heading of this column table.setText(table.getColCount() - 1, 0, "Total"); // The next two cells are the total of the data series double total0 = new ArrayMath(data0).sum(); double total1 = new ArrayMath(data1).sum(); table.setText(table.getColCount() - 1, 1, (total0).ToString()); table.setText(table.getColCount() - 1, 2, (total1).ToString()); // The last cell is the percentage differences of the total double totalPercentageDiff = (total1 - total0) / total0 * 100; // Use red or green color depending on whether the difference is positive or negative string totalFormatString = "<*color=008800*>+{value|1}%"; if (totalPercentageDiff < 0) { totalFormatString = "<*color=cc0000*>{value|1}%"; } table.setText(table.getColCount() - 1, 3, c.formatValue(totalPercentageDiff, totalFormatString)); // // We now demonstrate how to adjust the plot area positions, to allow space for the // newly inserted left and right columns in the table. // // We layout the axis first in order to get the axis metrics (including table metrics) c.layoutAxes(); // If the first column is wider than the left y-axis, we need to reserve for some left // margin to ensure the first column stays within the chart. int leftMargin = 0; if (table.getColWidth(0) > c.yAxis().getThickness()) { leftMargin = table.getColWidth(0) - c.yAxis().getThickness(); } // Similarly, we need to reserve some right margin for the last column int rightMargin = table.getColWidth(table.getColCount() - 1); // Adjust the plot area size, such that the bounding box (inclusive of axes) using the // given left and right margin, plus 2 more pixels. Put the plot area 10 pixels below // the title and use 2 pixels as the bottom margin. from the left, right and bottom // edge, and is just under the legend box. c.packPlotArea(leftMargin + 2, title.getHeight() + 10, c.getWidth() - 3 - rightMargin, c.getHeight() - 3); // After determining the exact plot area position, we may adjust title position so that // it is centered relative to the plot area (instead of the chart) 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='Revenue in {xLabel} {dataSetName}: US$ {value}M'"); }