owc_绘图区(PlotArea)背景显示多种颜色
owc_绘图区(PlotArea)背景显示多种颜色
阅读(62) 评论(0) 发表时间:2008年07月21日 10:28
由于客户要求要在网页上显示实时的数据图表,我选择了OWC技术。研究了几天也画出了相应的柱状图和饼图的样图拿给用户看,相应的问题出现了。用户要求我画的其中的一个柱状图中有九根柱子,要分别显示在三种不同的背景颜色上,进行类别区分。 最初画的样图: 功能分析图: 这就涉及到要在修改绘图区背景颜色的基础上还要再增加两种背景颜色。 背景颜色好修改: objChart.PlotArea.Interior.Color = "red";//图例区域 也可以做渐变效果: objSpace.Charts[0].PlotArea.Interior.SetTwoColorGradient(OWC.ChartGradientStyleEnum.chGradientDiagonalDown, OWC.ChartGradientVariantEnum.chGradientVariantEnd, "skyBlue", "brown"); 但是实现一种以上的背景颜色,好像并没有现成的接口可以使用。我在百度和谷歌上查了两天,一无所获。后来转向雅虎英文搜索,搜到一位印度人发的贴子,他遇到了和我同样类型的问题:他想在绘图区一月份到七月份是一种背景颜色,七月份到九月份是另一种颜色...。让人沮丧的是,他06年发的帖子至今无一回复。 就在画图无路的情形下,andypope( 他的思路: 先画一个原始的气泡图: 再画一个有三个柱子的柱状图,三个柱子的颜色分别为红横绿。 再对柱状图进行一系列的操作,然后将两图叠加,最终成生成上面的合成图。andypope的代码是用VBA写的,过程繁琐,后来还是放弃。但是他的思路给了我很大的启发,为什么不可以用一个图做为另一个图的背景呢?考虑到将两图合并的复杂程度,我转而在一个图中,使用系列集(SeriesCollection)来实现。 首先,添加系列集一做为背景: 修改柱子的颜色和边框颜色。经过修饰,可得到如下效果图: 这个时候新的问题又出现了,相信大家也能看见原始的背景颜色(红色)多出来一块儿,很不美观。首先想到的解决办法,就是把每个柱子的数据都设成2000,致使整好填满整个背景,但是无论你的值设成多大,纵坐标的最大刻度值总会大于你所设数据的最大值(自己可以一试),也就是说,无论如何原始背景总会多出一块。 俗话说:上有政策,下有对策。能不能把原始背景也设成白色,让它和空间背景(白色)混成一体。想到了就赶紧去做: 将绘图区边框也设成白色,再将横向网格线去掉: 多颜色背景终于做好了,这时通过添加系列集二,你也可以正常在上面画你想要的柱状图了。 看起来上面步骤很多,其实代码非常简单。C#源码: using OWC = Microsoft.Office.Interop.Owc11;//导入OWC,更改命名空间(cy) OWC.ChartSpace objSpace = new OWC.ChartSpaceClass(); OWC.ChChart objChart = objSpace.Charts.Add(0); objChart.PlotArea.Interior.Color = "white";//图例区域 objChart.PlotArea.Border.Color = "white";//图例区域边框 objChart.Axes[1].HasMajorGridlines = false;//不显示横向网格线 objChart.Axes[0].HasTickLabels = false; objSpace.Border.Color = "black"; objChart.SeriesCollection.Add(0); objChart.SeriesCollection[0].Type = OWC.ChartChartTypeEnum.chChartTypeColumnClustered; objChart.SeriesCollection[0].GapWidth = 4; objChart.SeriesCollection[0].SetData(OWC.ChartDimensionsEnum.chDimCategories, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "1" + '\t' + "2" + '\t' + "3" + '\t' + "4" + '\t' + "5" + '\t' + "6" + '\t' + "7" + '\t' + "8" + '\t' + "9" + '\t' + "10" + '\t' + "11" + '\t' + "12" + '\t' + "13" + '\t' + "14" + '\t' + "15"); objChart.SeriesCollection[0].SetData(OWC.ChartDimensionsEnum.chDimValues, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900" + '\t' + "1900"); //设置三种不同的背景 objChart.SeriesCollection[0].Points[0].Interior.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[1].Interior.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[2].Interior.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[0].Border.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[1].Border.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[2].Border.Color = "LimeGreen"; objChart.SeriesCollection[0].Points[3].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[4].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[5].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[6].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[7].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[8].Interior.Color = "Chocolate"; objChart.SeriesCollection[0].Points[3].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[4].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[5].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[6].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[7].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[8].Border.Color = "Chocolate"; objChart.SeriesCollection[0].Points[9].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[10].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[11].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[12].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[13].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[14].Interior.Color = "skyblue"; objChart.SeriesCollection[0].Points[9].Border.Color = "skyblue"; objChart.SeriesCollection[0].Points[10].Border.Color = "skyblue"; objChart.SeriesCollection[0].Points[11].Border.Color = "skyblue"; objChart.SeriesCollection[0].Points[12].Border.Color = "skyblue"; objChart.SeriesCollection[0].Points[13].Border.Color = "skyblue"; objChart.SeriesCollection[0].Points[14].Border.Color = "skyblue"; objChart.SeriesCollection.Add(1); objChart.SeriesCollection[1].Type = OWC.ChartChartTypeEnum.chChartTypeColumnClustered; objChart.SeriesCollection[1].Border.Color = "coral"; objChart.SeriesCollection[1].DataLabelsCollection.Add(); objChart.SeriesCollection[1].DataLabelsCollection[0].HasValue = true; //objChart.SeriesCollection[1].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames, // +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "上半年进度"); objChart.SeriesCollection[1].SetData(OWC.ChartDimensionsEnum.chDimCategories, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "2" + '\t' + "5" + '\t' + "6" + '\t' + "7" + '\t' + "8" + '\t' + "11" + '\t' + "12" + '\t' + "13" + '\t' + "14"); objChart.SeriesCollection[1].SetData(OWC.ChartDimensionsEnum.chDimValues, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "1500" + '\t' + "700" + '\t' + "200" + '\t' + "200" + '\t' + "300" + '\t' + "800" + '\t' + "300" + '\t' + "300" + '\t' + "200"); objChart.SeriesCollection[1].Points[1].Interior.Color = "DodgerBlue"; objChart.SeriesCollection[1].Points[1].Border.Color = "DodgerBlue"; objChart.SeriesCollection[1].Points[4].Interior.Color = "Black"; objChart.SeriesCollection[1].Points[4].Border.Color = "Black"; objChart.SeriesCollection[1].Points[5].Interior.Color = "Teal"; objChart.SeriesCollection[1].Points[5].Border.Color = "Teal"; objChart.SeriesCollection[1].Points[6].Interior.Color = "Gold"; objChart.SeriesCollection[1].Points[6].Border.Color = "Gold"; objChart.SeriesCollection[1].Points[7].Interior.Color = "InactiveCaption"; objChart.SeriesCollection[1].Points[7].Border.Color = "InactiveCaption"; objChart.SeriesCollection[1].Points[10].Interior.Color = "DeepSkyBlue"; objChart.SeriesCollection[1].Points[10].Border.Color = "DeepSkyBlue"; objChart.SeriesCollection[1].Points[11].Interior.Color = "Azure"; objChart.SeriesCollection[1].Points[11].Border.Color = "Azure"; objChart.SeriesCollection[1].Points[12].Interior.Color = "Gainsboro"; objChart.SeriesCollection[1].Points[12].Border.Color = "Gainsboro"; objChart.SeriesCollection[1].Points[13].Interior.Color = "LightBlue"; objChart.SeriesCollection[1].Points[13].Border.Color = "LightBlue"; objSpace.ExportPicture(Server.MapPath("./") + @"/image/tmp_ColumnClustered_file.gif", "gif", 200, 200); |