以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 复杂图表如何呈现,请专家指点 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148333) |
||||||||||||||||||||||||||||
-- 作者:xiangyushi -- 发布时间:2020/4/5 18:14:00 -- 复杂图表如何呈现,请专家指点 工作需要,将每项产品的每月上、中、下旬的计划数情况和完成数情况在一个图表中进行对比呈现, 如图(注:下图是在Excel中用两图表,然后剪切拼接而成) 数据表如下(可直接复制粘贴到Excel中)
[此贴子已经被作者于2020/4/5 18:16:59编辑过]
|
||||||||||||||||||||||||||||
-- 作者:sloyy -- 发布时间:2020/4/5 21:04:00 -- 非常简单: 1 设置2个图系,代表计划数和完成数, 产品 PD01,PD02,PD03 图形设置为柱状图; 2 2个图系的 Stacked 都设置为true 叠加
[此贴子已经被作者于2020/4/5 21:05:29编辑过]
|
||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/4/6 9:51:00 -- 只能做到前后重叠的效果,无法并排显示 Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表 Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮 Chart.ChartType = ChartTypeEnum.Bar \'图表类型该为Bar(条形) Chart.DataSource = "Sheet2" \'设置绑定表 Chart.SeriesList.Clear() \'清除图表原来的图系 Chart.SeriesList2.Clear() Series = Chart.SeriesList.Add() \'增加第一个图系 Series.Text = "计划上旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "计划上旬" \'Y轴绑定到数量列 Series = Chart.SeriesList.Add() \'增加第二个图系 Series.Text = "计划中旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "计划中旬" \'Y轴绑定到数量列 Series = Chart.SeriesList.Add() \'增加第二个图系 Series.Text = "计划下旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "计划下旬" \'Y轴绑定到数量列 Chart.AxisY.text = "计划" Chart.ChartType2 = ChartTypeEnum.Bar Series = Chart.SeriesList2.Add() \'增加第一个图系 Series.Text = "完成上旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "完成上旬" \'Y轴绑定到数量列 Series = Chart.SeriesList2.Add() \'增加第二个图系 Series.Text = "完成中旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "完成中旬" \'Y轴绑定到数量列 Series = Chart.SeriesList2.Add() \'增加第二个图系 Series.Text = "完成下旬" Series.X.DataField = "产品号" \'X轴绑定到产品列 Series.Y.DataField = "完成下旬" \'Y轴绑定到数量列 Chart.AxisY2.text = "完成" Chart.AxisY.Min = 0 \'指定Y轴的最小值 Chart.AxisY.Max =200 \'指定Y轴的最大值 Chart.AxisY2.Min = 0 \'指定Y轴的最小值 Chart.AxisY2.Max =200 \'指定Y轴的最大值 Chart.BarClusterWidth = 80 Chart.BarClusterWidth = 20 Chart.LegendVisible = True \'显示图列 Chart.Stacked = True Chart.Stacked2 = True Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端) |
||||||||||||||||||||||||||||
-- 作者:xiangyushi -- 发布时间:2020/4/7 9:38:00 -- 谢谢有点蓝! 前后重叠的效果看起来不够美观。 希望能在后续的版本更新中实现这个功能。
|
||||||||||||||||||||||||||||
-- 作者:shenyl0211 -- 发布时间:2020/4/7 12:51:00 -- 你的问题很有意思,也很现实。 你想要的来了(但你自己的图和数据对不上):列的顺序应改为:产品号、计划上旬、完成上旬、计划中旬、完成中旬、计划下旬、完成下旬。这样修改之后,即使没有图,也方便对比。
Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Dim t As Table = Tables("表A") \'定义一个变量t引用数据表 Dim r,ymax,y As Integer Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表 Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形) Chart.SeriesList.Clear() \'清除图表原来的图系 For Each c As Col In t.Cols If c.Name <> "产品号" Then y = 0 Series = Chart.SeriesList.Add() \'增加一个图系 Series.Text = c.Name \'设置图系的标题 Series.Length = t.Rows.Count \'设置图系的长度 For r = 0 To t.Rows.Count - 1 y = y + t.Rows(r)(c.Name) If c.name.StartsWith("计划") Then Series.X(r) = 2*r Else Series.X(r) = 2*r + 0.5 End If Series.Y(r) = t.Rows(r)(c.Name) Chart.AxisX.SetValueLabel(2*r + 0.25, t.Rows(r)("产品号")) \'指定字符表示 Next If y > ymax Then ymax = y End If End If Next chart.AxisY.Max = ymax Chart.AxisX.AnnoWithLabels = True \'启用字符标示 \'Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮 --实际更不好看 Chart.LegendVisible = True \'显示图列 Chart.LegendCompass = CompassEnum.South \'图列显示在南方(底端) Chart.Stacked = True [此贴子已经被作者于2020/4/7 13:00:40编辑过]
|
||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/4/7 13:50:00 -- |