int main(int argc, char *argv[]) { // The data for the bar chart double data[] = {450, 560, 630, 800, 1100, 1350, 1600, 1950, 2300, 2700}; // The labels for the bar chart const char *labels[] = {"1996", "1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005"}; // Create a XYChart object of size 600 x 380 pixels. Set background color to // brushed silver, with a 2 pixel 3D border. Use rounded corners of 20 pixels // radius. XYChart *c = new XYChart(600, 380, Chart::brushedSilverColor(), Chart::Transparent, 2); // Add a title to the chart using 18pts Times Bold Italic font. Set top/bottom // margins to 8 pixels. c->addTitle("Annual Revenue for Star Tech", "timesbi.ttf", 18)->setMargin(0, 0, 8, 8); // Set the plotarea at (70, 55) and of size 460 x 280 pixels. Use transparent // border and black grid lines. Use rounded frame with radius of 20 pixels. c->setPlotArea(70, 55, 460, 280, -1, -1, Chart::Transparent, 0x000000); c->setRoundedFrame(0xffffff, 20); // Add a multi-color bar chart layer using the supplied data. Set cylinder bar // shape. c->addBarLayer(DoubleArray(data, sizeof(data)/sizeof(data[0])), IntArray(0, 0) )->setBarShape(Chart::CircleShape); // Set the labels on the x axis. c->xAxis()->setLabels(StringArray(labels, sizeof(labels)/sizeof(labels[0]))); // Show the same scale on the left and right y-axes c->syncYAxis(); // Set the left y-axis and right y-axis title using 10pt Arial Bold font c->yAxis()->setTitle("USD (millions)", "arialbd.ttf", 10); c->yAxis2()->setTitle("USD (millions)", "arialbd.ttf", 10); // Set y-axes to transparent c->yAxis()->setColors(Chart::Transparent); c->yAxis2()->setColors(Chart::Transparent); // Disable ticks on the x-axis by setting the tick color to transparent c->xAxis()->setTickColor(Chart::Transparent); // Set the label styles of all axes to 8pt Arial Bold font c->xAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis2()->setLabelStyle("arialbd.ttf", 8); // Output the chart c->makeChart("cylinderlightbar.jpg"); //free up resources delete c; return 0; }
void GraphWidget::drawChart() { XYChart *c = new XYChart(size.width(), size.height() - 100, Chart::Transparent); c->setPlotArea(10, 50, c->getWidth() - 65, c->getHeight() - 10, 0x000000, -1, 0xC8C8C8, Chart::Transparent, Chart::Transparent); c->setClipping(); c->getLegend()->setLineStyleKey(); c->getLegend()->setFontSize(10); //遍历查询结果并绘制结果 int ea_result_count = ea_results.size(); //设置X轴的label for(int i = 0;i < ea_result_count;i++){ ExchangeRateResult *ea_result = ea_results[i]; DoubleArray x_data = getXData(i); DoubleArray y_data = ea_result->getYData(); double viewPortStartDate = m_ChartViewer->getValueAtViewPort("x", m_ChartViewer->getViewPortLeft()); double viewPortEndDate = m_ChartViewer->getValueAtViewPort("x", m_ChartViewer->getViewPortLeft() + m_ChartViewer->getViewPortWidth()); int startIndex = (int)floor(Chart::bSearch(x_data, viewPortStartDate)); int endIndex = (int)ceil(Chart::bSearch(x_data, viewPortEndDate)); int noOfPoints = endIndex - startIndex + 1; DoubleArray viewPortXData = DoubleArray(x_data.data + startIndex, noOfPoints); DoubleArray viewPortYData = DoubleArray(y_data.data + startIndex, noOfPoints); //添加图层 LineLayer *layer = c->addLineLayer(); layer->setLineWidth(1); //设置X轴 layer->setXData(viewPortXData); //设置Y轴 layer->addDataSet(viewPortYData, ea_result->getColor(), ea_result->getName().toUtf8().data())->setUseYAxis2(); } c->xAxis()->setLabelStyle("arial.ttf", 10); c->yAxis2()->setLabelStyle("arial.ttf", 10); c->xAxis()->setColors(0xC8C8C8, 0xC8C8C8); c->yAxis2()->setColors(0xC8C8C8, 0xC8C8C8); m_ChartViewer->syncDateAxisWithViewPort("x", c->xAxis()); c->yAxis()->setTickDensity(30); c->yAxis2()->setTickDensity(30); if (!m_ChartViewer->isInMouseMoveEvent()) { trackLineLegend(c, (0 == m_ChartViewer->getChart()) ? c->getPlotArea()->getRightX() : m_ChartViewer->getPlotAreaMouseX()); } delete m_ChartViewer->getChart(); m_ChartViewer->setChart(c); }
// // Draw the chart and display it in the given viewer // void TrackAxis::drawChart(QChartViewer *viewer) { // Data for the chart as 2 random data series RanSeries r(127); DoubleArray data0 = r.getSeries(180, 10, -1.5, 1.5); DoubleArray data1 = r.getSeries(180, 150, -15, 15); DoubleArray timeStamps = r.getDateSeries(180, Chart::chartTime(2011, 1, 1), 86400); // Create a XYChart object of size 670 x 400 pixels XYChart *c = new XYChart(670, 400); // Add a title to the chart using 18 pts Times New Roman Bold Italic font c->addTitle("Plasma Stabilizer Energy Usage", "timesbi.ttf", 18); // Set the plotarea at (50, 55) with width 100 pixels less than chart width, and height 90 pixels // less than chart height. Use a vertical gradient from light blue (f0f6ff) to sky blue (a0c0ff) // as background. Set border to transparent and grid lines to white (ffffff). c->setPlotArea(50, 55, c->getWidth() - 100, c->getHeight() - 90, c->linearGradientColor(0, 55, 0, c->getHeight() - 35, 0xf0f6ff, 0xa0c0ff), -1, Chart::Transparent, 0xffffff, 0xffffff); // Add a legend box at (50, 25) using horizontal layout. Use 10pts Arial Bold as font. Set the // background and border color to Transparent. c->addLegend(50, 25, false, "arialbd.ttf", 10)->setBackground(Chart::Transparent); // Set axis label style to 8pts Arial Bold c->xAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis2()->setLabelStyle("arialbd.ttf", 8); // Set the axis stem to transparent c->xAxis()->setColors(Chart::Transparent); c->yAxis()->setColors(Chart::Transparent); c->yAxis2()->setColors(Chart::Transparent); // Configure x-axis label format c->xAxis()->setMultiFormat(Chart::StartOfYearFilter(), "{value|mm/yyyy} ", Chart::StartOfMonthFilter(), "{value|mm}"); // Add axis title using 10pts Arial Bold Italic font c->yAxis()->setTitle("Power Usage (Watt)", "arialbi.ttf", 10); c->yAxis2()->setTitle("Effective Load (kg)", "arialbi.ttf", 10); // Add a line layer to the chart using a line width of 2 pixels. LineLayer *layer = c->addLineLayer(); layer->setLineWidth(2); // Add 2 data series to the line layer layer->setXData(timeStamps); layer->addDataSet(data0, 0xcc0000, "Power Usage"); layer->addDataSet(data1, 0x008800, "Effective Load")->setUseYAxis2(); // Set the chart image to the QChartViewer viewer->setChart(c); }
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 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 *labels0[] = {"0\nJun 4", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "0\nJun 5"}; // The labels for the top x axis. Note that "-" means a minor tick. const char *labels1[] = {"Jun 3\n12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "Jun 4\n0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "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 labels on the x axis. c->xAxis()->setLabels(StringArray(labels0, sizeof(labels0)/sizeof(labels0[0]))); // Display 1 out of 3 labels on the x-axis. Show minor ticks for remaining // labels. c->xAxis()->setLabelStep(3, 1); // 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 labels on the x axis. c->xAxis2()->setLabels(StringArray(labels1, sizeof(labels1)/sizeof(labels1[0]))); // Display 1 out of 3 labels on the x-axis. Show minor ticks for remaining // labels. c->xAxis2()->setLabelStep(3, 1); // 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[0])), -1, "Red Transactions")->setLineWidth(2); // Add an area layer to the chart with no area boundary line c->addAreaLayer(DoubleArray(data1, sizeof(data1)/sizeof(data1[0])), -1, "Green Transactions")->setLineWidth(0); // output the chart c->makeChart("dualxaxis.png"); //free up resources delete c; return 0; }
int main(int argc, char *argv[]) { // The data for the chart double data0[] = {42, 49, Chart::NoValue, 38, 64, 56, 29, 41, 44, 57}; double data1[] = {65, 75, 47, 34, 42, 49, 73, Chart::NoValue, 90, 69, 66, 78}; double data2[] = {Chart::NoValue, Chart::NoValue, 25, 28, 38, 20, 22, Chart::NoValue, 25, 33, 30, 24}; const char *labels[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; // Create a XYChart object of size 600 x 360 pixels. Set background color to // brushed silver, with a 2 pixel 3D border. Use rounded corners. XYChart *c = new XYChart(600, 360, Chart::brushedSilverColor(), Chart::Transparent, 2); c->setRoundedFrame(); // Add a title using 18 pts Times New Roman Bold Italic font. #Set top/bottom // margins to 6 pixels. TextBox *title = c->addTitle("Product Line Global Revenue", "timesbi.ttf", 18); title->setMargin(0, 0, 6, 6); // Add a separator line just under the title c->addLine(10, title->getHeight(), c->getWidth() - 11, title->getHeight(), Chart::LineColor); // 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. LegendBox *legendBox = c->addLegend(c->getWidth() / 2, title->getHeight(), false, "arialbd.ttf", 10); legendBox->setAlignment(Chart::TopCenter); legendBox->setBackground(Chart::Transparent, Chart::Transparent); // Tentatively set the plotarea at (70, 75) and of 460 x 240 pixels in size. Use // transparent border and black (000000) grid lines c->setPlotArea(70, 75, 460, 240, -1, -1, Chart::Transparent, 0x000000, -1); // Set the x axis labels c->xAxis()->setLabels(StringArray(labels, sizeof(labels)/sizeof(labels[0]))); // Show the same scale on the left and right y-axes c->syncYAxis(); // 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); // Set all axes to transparent c->xAxis()->setColors(Chart::Transparent); c->yAxis()->setColors(Chart::Transparent); c->yAxis2()->setColors(Chart::Transparent); // Set the x-axis margins to 15 pixels, so that the horizontal grid lines can // extend beyond the leftmost and rightmost vertical grid lines c->xAxis()->setMargin(15, 15); // Set axis label style to 8pts Arial Bold c->xAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis()->setLabelStyle("arialbd.ttf", 8); c->yAxis2()->setLabelStyle("arialbd.ttf", 8); // Add axis title using 10pts Arial Bold Italic font c->yAxis()->setTitle("Revenue in USD millions", "arialbi.ttf", 10); c->yAxis2()->setTitle("Revenue in USD millions", "arialbi.ttf", 10); // Add the first line. The missing data will be represented as gaps in the line // (the default behaviour) LineLayer *layer0 = c->addLineLayer(); layer0->addDataSet(DoubleArray(data0, sizeof(data0)/sizeof(data0[0])), 0xff0000, "Quantum Computer")->setDataSymbol(Chart::GlassSphere2Shape, 11); layer0->setLineWidth(3); // Add the second line. The missing data will be represented by using dash lines // to bridge the gap LineLayer *layer1 = c->addLineLayer(); layer1->addDataSet(DoubleArray(data1, sizeof(data1)/sizeof(data1[0])), 0x00ff00, "Atom Synthesizer")->setDataSymbol(Chart::GlassSphere2Shape, 11); layer1->setLineWidth(3); layer1->setGapColor(c->dashLineColor(0x00ff00)); // Add the third line. The missing data will be ignored - just join the gap with // the original line style. LineLayer *layer2 = c->addLineLayer(); layer2->addDataSet(DoubleArray(data2, sizeof(data2)/sizeof(data2[0])), 0xff6600, "Proton Cannon")->setDataSymbol(Chart::GlassSphere2Shape, 11); layer2->setLineWidth(3); layer2->setGapColor(Chart::SameAsMainColor); // layout the legend so we can get the height of the legend box c->layoutLegend(); // Adjust the plot area size, such that the bounding box (inclusive of axes) is // 15 pixels from the left edge, just under the legend box, 16 pixels from the // right edge, and 25 pixels from the bottom edge. c->packPlotArea(15, legendBox->getTopY() + legendBox->getHeight(), c->getWidth() - 16, c->getHeight() - 25); // Output the chart c->makeChart("missingpoints.jpg"); //free up resources delete c; return 0; }