概述:
图形和图表是Web上数据表现的很好的形式,在ASP.NET,可以使用Office Web Components (OWC)来创建统计图。Office Web Component (OWC)是包含在Microsoft Office 2000中的一套组件,利用这些组件,我们可以很方便地在浏览器中或者传统的编程环境中进行数据分析和报表。、
代码:
1 //创建一个图形容器对象 ChartSpace objCSpace = new ChartSpaceClass();2 //在图形容器中增加一个图形对象
3 ChChart objChart = objCSpace.Charts.Add(0);
4 //将图形的类型设置为柱状图的一种
5 objChart.Type = ChartChartTypeEnum.chChartTypePie3D;
6 //将图形容器的边框颜色设置为白色
7 objCSpace.Border.Color = "White";
8
9 //显示标题
10 objChart.HasTitle = true;
11 //设置标题内容
12 objChart.Title.Caption = "统计图测试";
13 //设置标题字体的大小
14 objChart.Title.Font.Size = 12;
15 //设置标题为粗体
16 objChart.Title.Font.Bold = true;
17 //设置标题颜色为红色
18 objChart.Title.Font.Color = "Red";
19
20 //显示图例
21 objChart.HasLegend = true;
22 //设置图例字体大小
23 objChart.Legend.Font.Size = 11;
24 //设置图例位置为底端
25 objChart.Legend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
26
27 //在图形对象中添加一个系列
28 objChart.SeriesCollection.Add(0);
29 //给定系列的名字
30 objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
31 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "指标");
32 //给定值
33 objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
34 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "10\t40\t58\t55\t44");
35 //增加数据值标签
36 objChart.SeriesCollection[0].DataLabelsCollection.Add();
37 //显示各部分的数值
38 objChart.SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
39 //显示各部分的百分比
40 objChart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
41
42
43 //显示数据,创建GIF文件的相对路径.
44 string FileName = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString()
45 + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + ".gif";
46 objCSpace.ExportPicture(HttpContext.Current.Server.MapPath(".") + @"test.jpg", "jpg", 600, 300);
47 //加载图片
48 Image1.ImageUrl = Server.MapPath(".") + @"test.jpg";
49
Code
1 public void RenderChart(string Year, string Type, string eventtype)
2 {
3
4 //创建X坐标的值,表示事件类型
5
6 string[] EventType = new string[5] { "桃仙", "本溪", "南芬", "凤城", "丹东" };
7
8 string center = "";
9
10 //创建Y坐标的值,表示数据值
11 string[] Count1 = new string[5] { "80", "121", "37", "25", "50" };
12 string[] Count2 = new string[5] { "190", "303", "271", "124", "132" };
13 string[] Count3 = new string[5] { "2", "8", "0", "1", "1" };
14 string[] Count4 = new string[5] { "21", "64", "13", "14", "5" };
15 string count = "";
16 //不同的分中心取得不同的数据
17 switch (eventtype)
18 {
19 case "交通肇事":
20
21 foreach (string ch in EventType)
22 {
23 center += ch + "\t";
24 }
25
26 foreach (string str in Count1)
27 {
28 count += str + "\t";
29 }
30 break;
31
32 case "道路管制":
33 foreach (string ch in EventType)
34 {
35 center += ch + "\t";
36 }
37
38 foreach (string str in Count2)
39 {
40 count += str + "\t";
41 }
42 break;
43
44 case "交通阻塞":
45 foreach (string ch in EventType)
46 {
47 center += ch + "\t";
48 }
49
50 foreach (string str in Count3)
51 {
52 count += str + "\t";
53 }
54 break;
55
56 case "投诉":
57 foreach (string ch in EventType)
58 {
59 center += ch + "\t";
60 }
61
62 foreach (string str in Count4)
63 {
64 count += str + "\t";
65 }
66 break;
67
68 }
69 center = center.Substring(0, center.Length - 1);
70 count = count.Substring(0, count.Length - 1);
71 //创建图表空间
72 ChartSpace mychartSpace = new ChartSpace();
73 //在图表空间内添加一个图表对象
74 ChChart mychart = mychartSpace.Charts.Add(0);
75 //设置图表类型
76 switch (Type)
77 {
78 case "线形图":
79 mychart.Type = ChartChartTypeEnum.chChartTypeLineStackedMarkers;
80 break;
81 case "柱形图":
82 mychart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
83 break;
84 case "饼形图":
85 mychart.Type = ChartChartTypeEnum.chChartTypePie3D;
86 break;
87 }
88 //将图形容器的边框颜色设置为ee33ff
89 mychartSpace.Border.Color = "#ee33ff";
90
91 //设置图表的一些属性
92 //是否需要图例
93 mychart.HasLegend = true;
94 //设置图例字体大小
95 mychart.Legend.Font.Size = 11;
96 //设置图例位置为底端 默认为右端
97 // mychart.Legend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
98
99 //显示主题
100 mychart.HasTitle = true;
101 //主题内容
102 mychart.Title.Caption = Year + "年 " + eventtype;
103 //设置标题字体的大小
104 mychart.Title.Font.Size = 12;
105 //设置标题为粗体
106 mychart.Title.Font.Bold = true;
107 //设置标题颜色为红色
108 mychart.Title.Font.Color = "Red";
109
110 ////背景颜色
111 //mychart.PlotArea.Interior.Color = "blue";
112 ////底色
113 //mychart.PlotArea.Floor.Interior.Color = "green";
114
115 // mychart.Overlap = 50;
116
117
118
119 //在图形对象中添加一个系列
120 mychart.SeriesCollection.Add(0);
121
122 //给定series的名字
123 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
124 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "Chart");
125 //给定分类
126 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories,
127 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, center);
128 //给定值
129 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
130 (int)ChartSpecialDataSourcesEnum.chDataLiteral, count);
131
132 //增加数据值标签
133 mychart.SeriesCollection[0].DataLabelsCollection.Add();
134
135 //如果是饼图,显示各部分的百分比但不显示数据,反之相反。
136 if (Type == "饼形图")
137 {
138 //不显示各部分的数值
139 mychart.SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
140 //显示各部分的百分比
141 mychart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
142 }
143 else
144 {
145 ////设置x,y坐标
146 //mychart.Axes[0].HasTitle = true;
147 //mychart.Axes[0].Title.Caption = "月份";
148 //mychart.Axes[1].HasTitle = true;
149 //mychart.Axes[1].Title.Caption = "销量";
150 mychart.Axes[0].Font.Size = 11;
151 //显示各部分的数值
152 mychart.SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
153 //柱图及线图不显示各部分的百分比
154 mychart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = false;
155 }
156 //将柱状图的第一条柱设置为红色
157 //Point:代表图中的一部分,比如柱图的一条柱,饼图的一个扇区
158 //Interior:表示指定对象的内部
159 // mychart.SeriesCollection[0].Points[0].Interior.Color = "Red";
160 //mychart.SeriesCollection[0].Points[1].Interior.Color = "green";
161 // mychart.SeriesCollection[0].Points[2].Interior.Color = "white";
162
163 //将第三个扇区抽离出来
164 //Explosion:返回或设置指定饼图或圆环图扇面的分离程度值。有效范围为 0 到 1000。分离程度值等于图表半径的百分比。
165 //Long 类型,可读写。
166 // mychart.SeriesCollection[0].Points[2].Explosion = 45;
167
168 //给第2个扇区设置OWC预设的纹理,并设置纹理的背景色为淡绿色,前景色为红色
169 //OWC提供了很多纹理,这是其中一种
170 //具体的纹理样式可以参看帮助中的ChartPatternTypeEnum枚举
171 // mychart.SeriesCollection[0].Points[1].Interior.SetPatterned(Microsoft.Office.Interop.Owc11.ChartPatternTypeEnum.chPatternDiagonalBrick, "Red", "LightGreen");
172
173
174 //生成图片
175 mychartSpace.ExportPicture(HttpContext.Current.Server.MapPath(".") + @"test.jpg", "jpg", 500, 220);
176 //加载图片
177 Image1.ImageUrl = Server.MapPath(".") + @"test.jpg";
178 }
179
1 public void RenderChart(string Year, string Type, string eventtype)
2 {
3
4 //创建X坐标的值,表示事件类型
5
6 string[] EventType = new string[5] { "桃仙", "本溪", "南芬", "凤城", "丹东" };
7
8 string center = "";
9
10 //创建Y坐标的值,表示数据值
11 string[] Count1 = new string[5] { "80", "121", "37", "25", "50" };
12 string[] Count2 = new string[5] { "190", "303", "271", "124", "132" };
13 string[] Count3 = new string[5] { "2", "8", "0", "1", "1" };
14 string[] Count4 = new string[5] { "21", "64", "13", "14", "5" };
15 string count = "";
16 //不同的分中心取得不同的数据
17 switch (eventtype)
18 {
19 case "交通肇事":
20
21 foreach (string ch in EventType)
22 {
23 center += ch + "\t";
24 }
25
26 foreach (string str in Count1)
27 {
28 count += str + "\t";
29 }
30 break;
31
32 case "道路管制":
33 foreach (string ch in EventType)
34 {
35 center += ch + "\t";
36 }
37
38 foreach (string str in Count2)
39 {
40 count += str + "\t";
41 }
42 break;
43
44 case "交通阻塞":
45 foreach (string ch in EventType)
46 {
47 center += ch + "\t";
48 }
49
50 foreach (string str in Count3)
51 {
52 count += str + "\t";
53 }
54 break;
55
56 case "投诉":
57 foreach (string ch in EventType)
58 {
59 center += ch + "\t";
60 }
61
62 foreach (string str in Count4)
63 {
64 count += str + "\t";
65 }
66 break;
67
68 }
69 center = center.Substring(0, center.Length - 1);
70 count = count.Substring(0, count.Length - 1);
71 //创建图表空间
72 ChartSpace mychartSpace = new ChartSpace();
73 //在图表空间内添加一个图表对象
74 ChChart mychart = mychartSpace.Charts.Add(0);
75 //设置图表类型
76 switch (Type)
77 {
78 case "线形图":
79 mychart.Type = ChartChartTypeEnum.chChartTypeLineStackedMarkers;
80 break;
81 case "柱形图":
82 mychart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
83 break;
84 case "饼形图":
85 mychart.Type = ChartChartTypeEnum.chChartTypePie3D;
86 break;
87 }
88 //将图形容器的边框颜色设置为ee33ff
89 mychartSpace.Border.Color = "#ee33ff";
90
91 //设置图表的一些属性
92 //是否需要图例
93 mychart.HasLegend = true;
94 //设置图例字体大小
95 mychart.Legend.Font.Size = 11;
96 //设置图例位置为底端 默认为右端
97 // mychart.Legend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
98
99 //显示主题
100 mychart.HasTitle = true;
101 //主题内容
102 mychart.Title.Caption = Year + "年 " + eventtype;
103 //设置标题字体的大小
104 mychart.Title.Font.Size = 12;
105 //设置标题为粗体
106 mychart.Title.Font.Bold = true;
107 //设置标题颜色为红色
108 mychart.Title.Font.Color = "Red";
109
110 ////背景颜色
111 //mychart.PlotArea.Interior.Color = "blue";
112 ////底色
113 //mychart.PlotArea.Floor.Interior.Color = "green";
114
115 // mychart.Overlap = 50;
116
117
118
119 //在图形对象中添加一个系列
120 mychart.SeriesCollection.Add(0);
121
122 //给定series的名字
123 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
124 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "Chart");
125 //给定分类
126 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories,
127 +(int)ChartSpecialDataSourcesEnum.chDataLiteral, center);
128 //给定值
129 mychart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
130 (int)ChartSpecialDataSourcesEnum.chDataLiteral, count);
131
132 //增加数据值标签
133 mychart.SeriesCollection[0].DataLabelsCollection.Add();
134
135 //如果是饼图,显示各部分的百分比但不显示数据,反之相反。
136 if (Type == "饼形图")
137 {
138 //不显示各部分的数值
139 mychart.SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
140 //显示各部分的百分比
141 mychart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
142 }
143 else
144 {
145 ////设置x,y坐标
146 //mychart.Axes[0].HasTitle = true;
147 //mychart.Axes[0].Title.Caption = "月份";
148 //mychart.Axes[1].HasTitle = true;
149 //mychart.Axes[1].Title.Caption = "销量";
150 mychart.Axes[0].Font.Size = 11;
151 //显示各部分的数值
152 mychart.SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
153 //柱图及线图不显示各部分的百分比
154 mychart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = false;
155 }
156 //将柱状图的第一条柱设置为红色
157 //Point:代表图中的一部分,比如柱图的一条柱,饼图的一个扇区
158 //Interior:表示指定对象的内部
159 // mychart.SeriesCollection[0].Points[0].Interior.Color = "Red";
160 //mychart.SeriesCollection[0].Points[1].Interior.Color = "green";
161 // mychart.SeriesCollection[0].Points[2].Interior.Color = "white";
162
163 //将第三个扇区抽离出来
164 //Explosion:返回或设置指定饼图或圆环图扇面的分离程度值。有效范围为 0 到 1000。分离程度值等于图表半径的百分比。
165 //Long 类型,可读写。
166 // mychart.SeriesCollection[0].Points[2].Explosion = 45;
167
168 //给第2个扇区设置OWC预设的纹理,并设置纹理的背景色为淡绿色,前景色为红色
169 //OWC提供了很多纹理,这是其中一种
170 //具体的纹理样式可以参看帮助中的ChartPatternTypeEnum枚举
171 // mychart.SeriesCollection[0].Points[1].Interior.SetPatterned(Microsoft.Office.Interop.Owc11.ChartPatternTypeEnum.chPatternDiagonalBrick, "Red", "LightGreen");
172
173
174 //生成图片
175 mychartSpace.ExportPicture(HttpContext.Current.Server.MapPath(".") + @"test.jpg", "jpg", 500, 220);
176 //加载图片
177 Image1.ImageUrl = Server.MapPath(".") + @"test.jpg";
178 }
179
运行结果: