//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 chart
            double[]   dataY0 = { 4, 4.5, 5, 5.25, 5.75, 5.25, 5, 4.5, 4, 3, 2.5, 2.5 };
            DateTime[] dataX0 = { new DateTime(1997,                                                                                                                                                            1, 1), new DateTime(1998,                 6, 25), new DateTime(
                                      1999,                                                                                                                                                                     9, 6), new DateTime(2000,                 2,  6), new DateTime(2000,  9,21), new DateTime(2001,
                                                                                                                                                                                                                                                                                                         3,                                                                                        4), new DateTime(2001,  6,                8), new DateTime(2002,2,                4),new DateTime(2002, 5, 19
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ), new DateTime(2002,  8,               16), new DateTime(2002,  12, 1), new DateTime(2003, 1, 1) };

            double[]   dataY1 = { 7, 6.5, 6, 5, 6.5, 7, 6, 5.5, 5, 4, 3.5, 3.5 };
            DateTime[] dataX1 = { new DateTime(1997,                                                                                         1, 1), new DateTime(1997,                 7, 1), new DateTime(
                                      1997,                                                                                                 12, 1), new DateTime(1999,                 1,15), new DateTime(1999,  6,9), new DateTime(
                                      2000,                                                                                                  3, 3), new DateTime(2000,                 8,13), new DateTime(2001,  5,5), new DateTime(2001,
                                                                                                                                                                                                                     9,                    16), new DateTime(2002,  3,               16), new DateTime(2002,6,                1),new DateTime(2003, 1, 1
                                                                                                                                                                                                                                                                                                                                 ) };

            // Create a XYChart object of size 500 x 270 pixels, with a pale blue (e0e0ff)
            // background, black border, 1 pixel 3D border effect and rounded corners
            XYChart c = new XYChart(600, 300, 0xe0e0ff, 0x000000, 1);

            c.setRoundedFrame();

            // Set the plotarea at (55, 60) and of size 520 x 200 pixels, with white (ffffff)
            // background. Set horizontal and vertical grid lines to grey (cccccc).
            c.setPlotArea(50, 60, 525, 200, 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 text is white
            // (ffffff) on a deep blue (000088) background, with soft lighting effect from the right
            // side.
            c.addTitle("Long Term Interest Rates", "Times New Roman Bold Italic", 15, 0xffffff
                       ).setBackground(0x000088, -1, Chart.softLighting(Chart.Right));

            // Set the y axis label format to display a percentage sign
            c.yAxis().setLabelFormat("{value}%");

            // Add a red (ff0000) step line layer to the chart and set the line width to 2 pixels
            StepLineLayer layer0 = c.addStepLineLayer(dataY0, 0xff0000, "Country AAA");

            layer0.setXData(dataX0);
            layer0.setLineWidth(2);

            // Add a blue (0000ff) step line layer to the chart and set the line width to 2 pixels
            StepLineLayer layer1 = c.addStepLineLayer(dataY1, 0x0000ff, "Country BBB");

            layer1.setXData(dataX1);
            layer1.setLineWidth(2);

            // Output the chart
            viewer.Chart = c;

            //include tool tip for the chart
            viewer.ImageMap = c.getHTMLImageMap("clickable", "",
                                                "title='{dataSetName} change to {value}% on {x|mmm dd, yyyy}'");
        }
Beispiel #2
0
        //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[]   dataY = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1 };
            DateTime[] dataX = { new DateTime(2008,                                                 7, 1,  0,  0,  0), new DateTime(2008,                 7, 1,  2, 17, 2
                                                                                                                                    ), new DateTime(2008, 7,  1,  8,   5,               30), new DateTime(2008, 7,  1, 10,  54, 10),
                                 new DateTime(2008,                                                 7, 1, 15, 40,  0), new DateTime(2008,                 7, 1, 18, 22, 20),
                                 new DateTime(2008,                                                 7, 1, 22, 17, 14), new DateTime(2008,                 7, 2,  2, 55, 50),
                                 new DateTime(2008,                                                 7, 2,  8, 17, 14), new DateTime(2008,                 7, 2, 11, 55, 50),
                                 new DateTime(2008,                                                 7, 2, 13, 17, 14), new DateTime(2008,                 7, 2, 17, 55, 50),
                                 new DateTime(2008,                                                 7, 2, 20, 17, 14), new DateTime(2008,                 7, 3,  0,  0, 0) };

            // In this example, we only use position 1, 3, 5 for the data series. Positions 0, 2, 4,
            // 6 are empty and serve as gaps.
            string[] labels = { "",                                                                             "ON Only Filling", "",
                                "<*font,color=cc2200*>ON<*/font*> / <*font,color=00aa22*>OFF<*/font*> Filling", "",
                                "Logic Line",                                                                   "" };

            // Create a XYChart object of size 600 x 180 pixels
            XYChart c = new XYChart(600, 180);

            // Add a title to the chart using 10 points Arial Bold font. Set top/bottom margins to
            // 12 pixels.
            ChartDirector.TextBox title = c.addTitle("Binary Data Series Demonstration",
                                                     "Arial Bold", 10);

            // Tentatively set the plotarea at (100, 30) and of size 470 x 120 pixels. Use
            // transparent border. Use grey (888888) solid line and light grey (ccccc) dotted line
            // as major and minor vertical grid lines.
            c.setPlotArea(100, 30, 470, 120, -1, -1, Chart.Transparent).setGridColor(
                Chart.Transparent, 0x888888, Chart.Transparent, c.dashLineColor(0xcccccc,
                                                                                Chart.DotLine));

            // Set axes to transparent
            c.xAxis().setColors(Chart.Transparent);
            c.yAxis().setColors(Chart.Transparent);

            // Set the y axis labels
            c.yAxis().setLabels(labels);

            // Set y-axis label style to 8pt Arial Bold
            c.yAxis().setLabelStyle("Arial Bold", 8);

            // Set x-axis major and minor tick density to 50 and 5 pixels. ChartDirector
            // auto-scaling will use this as the guideline when putting ticks on the x-axis.
            c.xAxis().setTickDensity(50, 5);

            // Use "<*font=Arial Bold*>{value|mmm dd}" for the first label of an hour, and
            // "{value|hh:nn}" for all other labels.
            c.xAxis().setMultiFormat(Chart.StartOfDayFilter(), "<*font=Arial Bold*>{value|mmm dd}",
                                     Chart.AllPassFilter(), "{value|hh:nn}");

            //
            // A Logic Line can be achieved using a StepLineLayer in ChartDirector
            //

            // Shift the data by 4.5, so instead of 0 - 1, it is now 4.5 to 5.5, or fluctuate around
            // the y = 5 (Logic Line label) position.
            double[] shiftedLine0 = new ArrayMath(dataY).add(4.5).result();

            // Add step lines using the original and the reversed data
            StepLineLayer layer0 = c.addStepLineLayer(shiftedLine0, 0x0000ff);

            layer0.setXData(dataX);

            //
            // To perform ON/OFF filling, we draw the logic line, and its reverse, and fill the
            // region in between
            //

            // Shift the data by 2.5, so instead of 0 - 1, it is now 2.5 to 3.5, or fluctuate around
            // the y = 3 (ON/OFF Filing label) position.
            double[] shiftedLine1 = new ArrayMath(dataY).add(2.5).result();
            // Reverse the data, so the 0 becomes 1 and 1 becomes 0, and shift it as well.
            double[] reverseShiftedLine1 = new ArrayMath(dataY).mul(-1).add(3.5).result();

            // Add step lines using the original and the reversed data
            StepLineLayer layer1 = c.addStepLineLayer(shiftedLine1, Chart.Transparent);

            layer1.addDataSet(reverseShiftedLine1, Chart.Transparent);
            layer1.setXData(dataX);

            // Fill the region between the two step lines with green (00aa22) or red (cc2200),
            // depending on whether the original or the reserve is higher.
            c.addInterLineLayer(layer1.getLine(0), layer1.getLine(1), 0x00aa22, 0xcc2200);

            //
            // The ON Only filling is the same as ON/OFF filling, except the OFF filling color is
            // transparent
            //

            // Shift the data by 0.5, so instead of 0 - 1, it is now 0.5 to 1.5, or fluctuate around
            // the y = 1 (ON Only Filing label) position.
            double[] shiftedLine2 = new ArrayMath(dataY).add(0.5).result();
            // Reverse the data, so the 0 becomes 1 and 1 becomes 0, and shift it as well.
            double[] reverseShiftedLine2 = new ArrayMath(dataY).mul(-1).add(1.5).result();

            // Add step lines using the original and the reversed data
            StepLineLayer layer2 = c.addStepLineLayer(shiftedLine2, Chart.Transparent);

            layer2.addDataSet(reverseShiftedLine2, Chart.Transparent);
            layer2.setXData(dataX);

            // Fill the region between the two step lines with green (00aa22) or transparent,
            // depending on whether the original or the reserve is higher.
            c.addInterLineLayer(layer2.getLine(0), layer2.getLine(1), 0x00aa22, Chart.Transparent);

            // Adjust the plot area size, such that the bounding box (inclusive of axes) is 10
            // pixels from the left edge, 10 pixels  below the title, 30 pixels from the right edge,
            // and 10 pixels above the bottom edge.
            c.packPlotArea(10, title.getHeight() + 10, c.getWidth() - 30, c.getHeight() - 10);

            // Output the chart
            viewer.Chart = c;
        }