ChartDirector Ver 3.0 (C++ Edition)

Dual X-Axis




This example illustrates the following ChartDirector features:

Source Code Listing

[The following project is available in "cppdemo/dualxaxis".]
#include "chartdir.h" int main(int argc, char *argv[]) { //The data for the chart double data0[] = {42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51, 56, 56, 60, 70, 76, 63, 67, 75, 64, 51}; double data1[] = {50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67, 67, 58, 59, 73, 77, 84, 82, 80, 84, 98}; //The labels for the bottom x axis. Note the "-" means a minor tick. const char *label0[] = {"0\nJun 4", "-", "-", "3", "-", "-", "6", "-", "-", "9", "-", "-", "12", "-", "-", "15", "-", "-", "18", "-", "-", "21", "-", "-", "0\nJun 5"}; //The labels for the top x axis. Note that "-" means a minor tick. const char *label1[] = {"Jun 3\n12", "-", "-", "15", "-", "-", "18", "-", "-", "21", "-", "-", "Jun 4\n0", "-", "-", "3", "-", "-", "6", "-", "-", "9", "-", "-", "12"}; //Create a XYChart object of size 310 x 310 pixels XYChart *c = new XYChart(310, 310); //Set the plotarea at (50, 50) and of size 200 x 200 pixels c->setPlotArea(50, 50, 200, 200); //Add a title to the primary (left) y axis c->yAxis()->setTitle("US Dollars"); //Set the tick length to -4 pixels (-ve means ticks inside the plot area) c->yAxis()->setTickLength(-4); //Add a title to the secondary (right) y axis c->yAxis2()->setTitle("HK Dollars (1 USD = 7.8 HKD)"); //Set the tick length to -4 pixels (-ve means ticks inside the plot area) c->yAxis2()->setTickLength(-4); //Synchronize the y-axis such that y2 = 7.8 x y1 c->syncYAxis(7.8); //Add a title to the bottom x axis c->xAxis()->setTitle("Hong Kong Time"); //Set the x axis labels using the given labels c->xAxis()->setLabels(StringArray(label0, sizeof(label0)/sizeof(*label0))); //Set the major tick length to -4 pixels and minor tick length to -2 pixels //(-ve means ticks inside the plot area) c->xAxis()->setTickLength(-4, -2); //Set the distance between the axis labels and the axis to 6 pixels c->xAxis()->setLabelGap(6); //Add a title to the top x-axis c->xAxis2()->setTitle("New York Time"); //Set the x-axis labels using the given labels c->xAxis2()->setLabels(StringArray(label1, sizeof(label1)/sizeof(*label1))); //Set the major tick length to -4 pixels and minor tick length to -2 pixels //(-ve means ticks inside the plot area) c->xAxis2()->setTickLength(-4, -2); //Set the distance between the axis labels and the axis to 6 pixels c->xAxis2()->setLabelGap(6); //Add a line layer to the chart with a line width of 2 pixels c->addLineLayer(DoubleArray(data0, sizeof(data0)/sizeof(*data0)), -1, "Server Load")->setLineWidth(2); //Add an area layer to the chart with no area boundary line c->addAreaLayer(DoubleArray(data1, sizeof(data1)/sizeof(*data1)), -1, "Transaction")->setLineWidth(0); //output the chart c->makeChart("dualxaxis.png"); //free up resources delete c; return 0; }