原創(chuàng)|其它|編輯:郝浩|2012-11-01 15:22:46.000|閱讀 1676 次
概述:這個(gè)例子演示了ChartDirector使用各種方法來(lái)表現(xiàn)缺失的數(shù)據(jù)點(diǎn)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
這個(gè)例子演示了各種方法來(lái)表現(xiàn)缺失的數(shù)據(jù)點(diǎn),這也表明在繪圖區(qū)的ChartDirector會(huì)自動(dòng)調(diào)整大小以適合圖表。如下圖所示:
在ChartDirector中,一系列的數(shù)據(jù)可能會(huì)存在丟失的情況,多使用NoValue來(lái)預(yù)定義常量。在一個(gè)線(xiàn)層里,在默認(rèn)的情況下面,缺失值表示在該行的差距。換句話(huà)說(shuō),就是該線(xiàn)路將被打斷。LineLayer.setGapColor被用來(lái)配置的線(xiàn)層加入通過(guò)NoValue點(diǎn),使用的線(xiàn)段可以是具有不同的顏色或風(fēng)格。
這個(gè)例子中,三個(gè)數(shù)據(jù)系列都包含NoValue點(diǎn)。紅線(xiàn)表示了使用差距的默認(rèn)行為來(lái)表現(xiàn)NoValue點(diǎn)。綠線(xiàn)演示了如何使用虛線(xiàn)加入通過(guò)NoValue點(diǎn)。橙色線(xiàn)表明使用具有相同的線(xiàn)條樣式來(lái)參加正常的數(shù)據(jù)點(diǎn)加入通過(guò)NoValue點(diǎn)。
在整個(gè)圖表配置完成之后呢,XYChart.packPlotArea方法將會(huì)被用來(lái)適應(yīng)在給定的邊界框力的小區(qū)面積和軸。
所使用的源代碼如下:
[ASP.NET - VB Version]
<%@ Page Language="VB" Debug="true" %> <%@ Import Namespace="ChartDirector" %> <%@ Register TagPrefix="chart" Namespace="ChartDirector" Assembly="netchartdir" %> <script runat="server"> ' ' Page Load event handler ' Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) ' The data for the chart Dim data0() As Double = {42, 49, Chart.NoValue, 38, 64, 56, 29, 41, 44, 57} Dim data1() As Double = {65, 75, 47, 34, 42, 49, 73, Chart.NoValue, 90, 69, 66, _ 78} Dim data2() As Double = {Chart.NoValue, Chart.NoValue, 25, 28, 38, 20, 22, _ Chart.NoValue, 25, 33, 30, 24} Dim labels() As String = {"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. Dim c As XYChart = 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. Dim title As ChartDirector.TextBox = c.addTitle("Product Line Global Revenue", _ "Times New Roman Bold Italic", 18) title.setMargin2(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. Dim legendBox As LegendBox = c.addLegend(c.getWidth() / 2, title.getHeight(), _ False, "Arial Bold", 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, &H000000, -1) ' Set the x axis labels c.xAxis().setLabels(labels) ' 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("Arial Bold", 8) c.yAxis().setLabelStyle("Arial Bold", 8) c.yAxis2().setLabelStyle("Arial Bold", 8) ' Add axis title using 10pts Arial Bold Italic font c.yAxis().setTitle("Revenue in USD millions", "Arial Bold Italic", 10) c.yAxis2().setTitle("Revenue in USD millions", "Arial Bold Italic", 10) ' Add the first line. The missing data will be represented as gaps in the line ' (the default behaviour) Dim layer0 As LineLayer = c.addLineLayer2() layer0.addDataSet(data0, &Hff0000, "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 Dim layer1 As LineLayer = c.addLineLayer2() layer1.addDataSet(data1, &H00ff00, "Atom Synthesizer").setDataSymbol( _ Chart.GlassSphere2Shape, 11) layer1.setLineWidth(3) layer1.setGapColor(c.dashLineColor(&H00ff00)) ' Add the third line. The missing data will be ignored - just join the gap with ' the original line style. Dim layer2 As LineLayer = c.addLineLayer2() layer2.addDataSet(data2, &Hff6600, "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 WebChartViewer1.Image = c.makeWebImage(Chart.JPG) ' Include tool tip for the chart WebChartViewer1.ImageMap = c.getHTMLImageMap("", "", _ "title='Revenue of {dataSetName} in {xLabel}: US$ {value}M'") End Sub </script> <html> <body> <chart:WebChartViewer id="WebChartViewer1" runat="server" /> </body> </html>
[ASP.NET - C# Version]
<%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="ChartDirector" %> <%@ Register TagPrefix="chart" Namespace="ChartDirector" Assembly="netchartdir" %> <script runat="server"> // // Page Load event handler // protected void Page_Load(object sender, EventArgs e) { // 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}; string[] 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. ChartDirector.TextBox title = c.addTitle("Product Line Global Revenue", "Times New Roman Bold Italic", 18); title.setMargin2(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, "Arial Bold", 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(labels); // 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("Arial Bold", 8); c.yAxis().setLabelStyle("Arial Bold", 8); c.yAxis2().setLabelStyle("Arial Bold", 8); // Add axis title using 10pts Arial Bold Italic font c.yAxis().setTitle("Revenue in USD millions", "Arial Bold Italic", 10); c.yAxis2().setTitle("Revenue in USD millions", "Arial Bold Italic", 10); // Add the first line. The missing data will be represented as gaps in the line // (the default behaviour) LineLayer layer0 = c.addLineLayer2(); layer0.addDataSet(data0, 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.addLineLayer2(); layer1.addDataSet(data1, 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.addLineLayer2(); layer2.addDataSet(data2, 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 WebChartViewer1.Image = c.makeWebImage(Chart.JPG); // Include tool tip for the chart WebChartViewer1.ImageMap = c.getHTMLImageMap("", "", "title='Revenue of {dataSetName} in {xLabel}: US$ {value}M'"); } </script> <html> <body> <chart:WebChartViewer id="WebChartViewer1" runat="server" /> </body> </html>
[Windows Forms - VB Version]
Imports System Imports Microsoft.VisualBasic Imports ChartDirector Public Class missingpoints Implements DemoModule 'Name of demo module Public Function getName() As String Implements DemoModule.getName Return "Missing Data Points" End Function 'Number of charts produced in this demo module Public Function getNoOfCharts() As Integer Implements DemoModule.getNoOfCharts Return 1 End Function 'Main code for creating chart. 'Note: the argument img is unused because this demo only has 1 chart. Public Sub createChart(viewer As WinChartViewer, img As String) _ Implements DemoModule.createChart ' The data for the chart Dim data0() As Double = {42, 49, Chart.NoValue, 38, 64, 56, 29, 41, 44, 57} Dim data1() As Double = {65, 75, 47, 34, 42, 49, 73, Chart.NoValue, 90, 69, _ 66, 78} Dim data2() As Double = {Chart.NoValue, Chart.NoValue, 25, 28, 38, 20, 22, _ Chart.NoValue, 25, 33, 30, 24} Dim labels() As String = {"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. Dim c As XYChart = 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. Dim title As ChartDirector.TextBox = c.addTitle( _ "Product Line Global Revenue", "Times New Roman Bold Italic", 18) title.setMargin2(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. Dim legendBox As LegendBox = c.addLegend(c.getWidth() / 2, title.getHeight( _ ), False, "Arial Bold", 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, &H000000, -1) ' Set the x axis labels c.xAxis().setLabels(labels) ' 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("Arial Bold", 8) c.yAxis().setLabelStyle("Arial Bold", 8) c.yAxis2().setLabelStyle("Arial Bold", 8) ' Add axis title using 10pts Arial Bold Italic font c.yAxis().setTitle("Revenue in USD millions", "Arial Bold Italic", 10) c.yAxis2().setTitle("Revenue in USD millions", "Arial Bold Italic", 10) ' Add the first line. The missing data will be represented as gaps in the ' line (the default behaviour) Dim layer0 As LineLayer = c.addLineLayer2() layer0.addDataSet(data0, &Hff0000, "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 Dim layer1 As LineLayer = c.addLineLayer2() layer1.addDataSet(data1, &H00ff00, "Atom Synthesizer").setDataSymbol( _ Chart.GlassSphere2Shape, 11) layer1.setLineWidth(3) layer1.setGapColor(c.dashLineColor(&H00ff00)) ' Add the third line. The missing data will be ignored - just join the gap ' with the original line style. Dim layer2 As LineLayer = c.addLineLayer2() layer2.addDataSet(data2, &Hff6600, "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 viewer.Chart = c 'include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", _ "title='Revenue of {dataSetName} in {xLabel}: US$ {value}M'") End Sub End Class
[Windows Forms - C# Version]
using System; using ChartDirector; namespace CSharpChartExplorer { public class missingpoints : DemoModule { //Name of demo module public string getName() { return "Missing Data Points"; } //Number of charts produced in this demo module public int getNoOfCharts() { return 1; } //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 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}; string[] 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. ChartDirector.TextBox title = c.addTitle("Product Line Global Revenue", "Times New Roman Bold Italic", 18); title.setMargin2(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, "Arial Bold", 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(labels); // 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("Arial Bold", 8); c.yAxis().setLabelStyle("Arial Bold", 8); c.yAxis2().setLabelStyle("Arial Bold", 8); // Add axis title using 10pts Arial Bold Italic font c.yAxis().setTitle("Revenue in USD millions", "Arial Bold Italic", 10); c.yAxis2().setTitle("Revenue in USD millions", "Arial Bold Italic", 10); // Add the first line. The missing data will be represented as gaps in // the line (the default behaviour) LineLayer layer0 = c.addLineLayer2(); layer0.addDataSet(data0, 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.addLineLayer2(); layer1.addDataSet(data1, 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.addLineLayer2(); layer2.addDataSet(data2, 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 viewer.Chart = c; //include tool tip for the chart viewer.ImageMap = c.getHTMLImageMap("clickable", "", "title='Revenue of {dataSetName} in {xLabel}: US$ {value}M'"); } } }
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件