int main(int argc, char *argv[]) { // The data for the chart double data[] = {40, 15, 7, 5, 2}; // The labels for the chart const char *labels[] = {"Hard Disk", "PCB", "Printer", "CDROM", "Keyboard"}; // In the pareto chart, the line data are just the accumulation of the raw data, // scaled to a range of 0 - 100% ArrayMath lineData = ArrayMath(DoubleArray(data, sizeof(data)/sizeof(data[0]))); lineData.acc(); double scaleFactor = lineData.max() / 100; if (scaleFactor == 0) { // Avoid division by zero error for zero data scaleFactor = 1; } lineData.div(scaleFactor); // Create a XYChart object of size 480 x 300 pixels. Set background color to // brushed silver, with a grey (bbbbbb) border and 2 pixel 3D raised effect. Use // rounded corners. Enable soft drop shadow. XYChart *c = new XYChart(400, 300, Chart::brushedSilverColor(), 0xbbbbbb, 2); c->setRoundedFrame(); c->setDropShadow(); // Add a title to the chart using 15 points Arial Italic. Set top/bottom margins // to 12 pixels. TextBox *title = c->addTitle("Pareto Chart Demonstration", "ariali.ttf", 15); title->setMargin(0, 0, 12, 12); // Tentatively set the plotarea at (50, 40). Set the width to 100 pixels less // than the chart width, and the height to 80 pixels less than the chart height. // Use pale grey (f4f4f4) background, transparent border, and dark grey (444444) // dotted grid lines. c->setPlotArea(50, 40, c->getWidth() - 100, c->getHeight() - 80, 0xf4f4f4, -1, Chart::Transparent, c->dashLineColor(0x444444, Chart::DotLine)); // Add a line layer for the pareto line LineLayer *lineLayer = c->addLineLayer(); // Add the pareto line using deep blue (0000ff) as the color, with circle symbols lineLayer->addDataSet(lineData.result(), 0x0000ff)->setDataSymbol( Chart::CircleShape, 9, 0x0000ff, 0x0000ff); // Set the line width to 2 pixel lineLayer->setLineWidth(2); // Bind the line layer to the secondary (right) y-axis. lineLayer->setUseYAxis2(); // Add a multi-color bar layer using the given data. BarLayer *barLayer = c->addBarLayer(DoubleArray(data, sizeof(data)/sizeof(data[0])), IntArray(0, 0)); // Set soft lighting for the bars with light direction from the right barLayer->setBorderColor(Chart::Transparent, Chart::softLighting(Chart::Right)); // Set the labels on the x axis. c->xAxis()->setLabels(StringArray(labels, sizeof(labels)/sizeof(labels[0]))); // Set the secondary (right) y-axis scale as 0 - 100 with a tick every 20 units c->yAxis2()->setLinearScale(0, 100, 20); // Set the format of the secondary (right) y-axis label to include a percentage // sign c->yAxis2()->setLabelFormat("{value}%"); // Set the relationship between the two y-axes, which only differ by a scaling // factor c->yAxis()->syncAxis(c->yAxis2(), scaleFactor); // Set the format of the primary y-axis label foramt to show no decimal point c->yAxis()->setLabelFormat("{value|0}"); // Add a title to the primary y-axis c->yAxis()->setTitle("Frequency"); // Set all axes to transparent c->xAxis()->setColors(Chart::Transparent); c->yAxis()->setColors(Chart::Transparent); c->yAxis2()->setColors(Chart::Transparent); // Adjust the plot area size, such that the bounding box (inclusive of axes) is // 10 pixels from the left edge, just below the title, 10 pixels from the right // edge, and 20 pixels from the bottom edge. c->packPlotArea(10, title->getHeight(), c->getWidth() - 10, c->getHeight() - 20); // Output the chart c->makeChart("pareto.jpg"); //free up resources delete c; return 0; }
int main(int argc, char *argv[]) { // The data for the bar chart double data0[] = {100, 115, 165, 107, 67}; double data1[] = {85, 106, 129, 161, 123}; double data2[] = {67, 87, 86, 167, 157}; // The labels for the bar chart const char *labels[] = {"Mon", "Tue", "Wed", "Thu", "Fri"}; // Create a XYChart object of size 600 x 360 pixels XYChart *c = new XYChart(600, 360); // Set the plotarea at (70, 20) and of size 400 x 300 pixels, with transparent background and // border and light grey (0xcccccc) horizontal grid lines c->setPlotArea(70, 20, 400, 300, Chart::Transparent, -1, Chart::Transparent, 0xcccccc); // Add a legend box at (480, 20) using vertical layout and 12pt Arial font. Set background and // border to transparent and key icon border to the same as the fill color. LegendBox *b = c->addLegend(480, 20, true, "arial.ttf", 12); b->setBackground(Chart::Transparent, Chart::Transparent); b->setKeyBorder(Chart::SameAsMainColor); // Set the x and y axis stems to transparent and the label font to 12pt Arial c->xAxis()->setColors(Chart::Transparent); c->yAxis()->setColors(Chart::Transparent); c->xAxis()->setLabelStyle("arial.ttf", 12); c->yAxis()->setLabelStyle("arial.ttf", 12); // Add a stacked bar layer BarLayer *layer = c->addBarLayer(Chart::Stack); // Add the three data sets to the bar layer layer->addDataSet(DoubleArray(data0, (int)(sizeof(data0) / sizeof(data0[0]))), 0xaaccee, "Server # 1"); layer->addDataSet(DoubleArray(data1, (int)(sizeof(data1) / sizeof(data1[0]))), 0xbbdd88, "Server # 2"); layer->addDataSet(DoubleArray(data2, (int)(sizeof(data2) / sizeof(data2[0]))), 0xeeaa66, "Server # 3"); // Set the bar border to transparent layer->setBorderColor(Chart::Transparent); // Enable labelling for the entire bar and use 12pt Arial font layer->setAggregateLabelStyle("arial.ttf", 12); // Enable labelling for the bar segments and use 12pt Arial font with center alignment layer->setDataLabelStyle("arial.ttf", 10)->setAlignment(Chart::Center); // For a vertical stacked bar with positive data, the first data set is at the bottom. For the // legend box, by default, the first entry at the top. We can reverse the legend order to make // the legend box consistent with the stacked bar. layer->setLegendOrder(Chart::ReverseLegend); // Set the labels on the x axis. c->xAxis()->setLabels(StringArray(labels, (int)(sizeof(labels) / sizeof(labels[0])))); // For the automatic y-axis labels, set the minimum spacing to 40 pixels. c->yAxis()->setTickDensity(40); // Add a title to the y axis using dark grey (0x555555) 14pt Arial Bold font c->yAxis()->setTitle("Y-Axis Title Placeholder", "arialbd.ttf", 14, 0x555555); // Output the chart c->makeChart("stackedbar.png"); //free up resources delete c; return 0; }
int main(int argc, char *argv[]) { // The data for the bar chart double data0[] = {100, 125, 245, 147, 67}; double data1[] = {85, 156, 179, 211, 123}; double data2[] = {97, 87, 56, 267, 157}; const char *labels[] = {"Mon", "Tue", "Wed", "Thur", "Fri"}; // Create a XYChart object of size 540 x 375 pixels XYChart *c = new XYChart(540, 375); // Add a title to the chart using 18pt Times Bold Italic font c->addTitle("Average Weekly Network Load", "timesbi.ttf", 18); // Set the plotarea at (50, 55) and of 440 x 280 pixels in size. Use a vertical gradient color // from light red (ffdddd) to dark red (880000) as background. Set border and grid lines to // white (ffffff). c->setPlotArea(50, 55, 440, 280, c->linearGradientColor(0, 55, 0, 335, 0xffdddd, 0x880000), -1, 0xffffff, 0xffffff); // Add a legend box at (50, 25) using horizontal layout. Use 10pt Arial Bold as font, with // transparent background. c->addLegend(50, 25, false, "arialbd.ttf", 10)->setBackground(Chart::Transparent); // Set the x axis labels c->xAxis()->setLabels(StringArray(labels, (int)(sizeof(labels) / sizeof(labels[0])))); // Draw the ticks between label positions (instead of at label positions) c->xAxis()->setTickOffset(0.5); // Set axis label style to 8pt Arial Bold c->xAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis()->setLabelStyle("arialbd.ttf", 8); // Set axis line width to 2 pixels c->xAxis()->setWidth(2); c->yAxis()->setWidth(2); // Add axis title c->yAxis()->setTitle("Throughput (MBytes Per Hour)"); // Add a multi-bar layer with 3 data sets and 4 pixels 3D depth BarLayer *layer = c->addBarLayer(Chart::Side, 4); layer->addDataSet(DoubleArray(data0, (int)(sizeof(data0) / sizeof(data0[0]))), 0xffff00, "Server #1"); layer->addDataSet(DoubleArray(data1, (int)(sizeof(data1) / sizeof(data1[0]))), 0x00ff00, "Server #2"); layer->addDataSet(DoubleArray(data2, (int)(sizeof(data2) / sizeof(data2[0]))), 0x9999ff, "Server #3"); // Set bar border to transparent. Use soft lighting effect with light direction from top. layer->setBorderColor(Chart::Transparent, Chart::softLighting(Chart::Top)); // Configure the bars within a group to touch each others (no gap) layer->setBarGap(0.2, Chart::TouchBar); // Output the chart c->makeChart("softmultibar.png"); //free up resources delete c; return 0; }