以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于图表问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=122197)

--  作者:ZJZK2018
--  发布时间:2018/7/20 15:31:00
--  关于图表问题
老师:
需求:1、X轴的数据为所有数据的1到最大值的整数。2、Y轴为对应值的次数,如没有对应值则为0
下面代码出错:

Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim t As Table = Tables("抽签入围台帐_Table2") \'定义一个变量t引用数据表
Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'设置图表类型
\'Chart.ChartType = ChartTypeEnum.Histogram \' 设置图表类型
Chart.SeriesList.Clear() \'清除图表原来的图系
Chart.AxisX.ClearValueLabel \'清除所有通过SetValueLabel设置的数值字符标示

Series = Chart.SeriesList.Add() \'增加一个图系
Series.Text = "入围编号趋势图" \'图例名称命名
Series.Length = t.Rows.Count \'设置图系的长度

Dim cnt As Integer = t.DataTable.Compute("Max(市外_入围编号)")
For ii As Integer = 1 To cnt  \'  t.Rows.Count - 1 \'指定每个数据点的位置
    Series.X(ii) = ii \'指定水平坐标
    For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置
        Series.Y(i) = t.Rows(i)("市外_次数") \'指定垂直坐标
        Chart.AxisX.SetValueLabel(i, Format(t.Rows(i)("市外_入围编号"))) \'指定字符表示
    Next
Next

Chart.AxisX.AnnoWithLabels = True \'启用字符标示
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass = CompassEnum.South \'图列显示在南方(底端)
Chart.AxisX.AnnoRotation = - 45 \'X轴标示逆时针旋转45度
Dim fnt As New Font("黑体",9) \'设置字体
Chart.AxisX.Font = fnt
Series.DataLabelText = "{#YVAL}" & "次" \'数据标示
Chart.SeriesList(0).FitType = FitTypeEnum.Spline \'采用平滑线条


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180720153136.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2018/7/20 16:45:00
--  

代码改成

 

Series = Chart.SeriesList.Add() \'增加一个图系
Series.Text = "入围编号趋势图" \'图例名称命名
Series.Length = t.Rows.Count \'设置图系的长度
For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置 

    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = t.Rows(i)("市外_次数") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, Format(t.Rows(i)("市外_入围编号"))) \'指定字符表示
Next

[此贴子已经被作者于2018/7/20 16:45:07编辑过]

--  作者:ZJZK2018
--  发布时间:2018/7/20 17:03:00
--  
老师:
我需要的是:X轴的数据为所有数据的1到最大值的连续整数,如下图:6、7、8、9、10、11、12


图片点击可在新窗口打开查看此主题相关图片如下:9999.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2018/7/20 17:28:00
--  
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Text = "入围编号趋势图" \'图例名称命名
Series.Length = t.Rows.Count+1 \'设置图系的长度

Dim cnt As Integer = t.DataTable.Compute("Max(市外_入围编号)")
For ii As Integer = 1 To cnt  \'  t.Rows.Count - 1 \'指定每个数据点的位置
    Series.X(ii) = ii \'指定水平坐标
    Series.Y(ii) = 0
Next
For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置   
    Series.Y(t.Rows(i)("市外_入围编号")) = t.Rows(i)("市外_次数") \'指定垂直坐标
Next

--  作者:ZJZK2018
--  发布时间:2018/7/21 23:22:00
--  
老师我的需求如图:
1、X轴的数据为所有数据的1到最大值的连续整数,但AAA图表中没有的数据就不要显示。
2、Y轴的值为0时,X轴不显示0次。

Dim cnt As Integer = t.DataTable.Compute("Max(市外入围_编号)")
Series.Length = cnt \'设置图系的长度
t.Sort = "市外入围_编号"
For ii As Integer = 1 To cnt  \'  t.Rows.Count - 1 \'指定每个数据点的位置
    Series.X(ii) = ii \'指定水平坐标
    Series.Y(ii) = 0
\'For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置
    Chart.AxisX.SetValueLabel(ii, Format(t.Rows(ii)("市外入围_编号"))) \'指定字符表示
\'Next
Next
For i As Integer = 0 To t.Rows.Count - 1 \'指定每个数据点的位置   
    Series.Y(t.Rows(i)("市外入围_编号")) = t.Rows(i)("市外入围_次数") \'指定垂直坐标
Next


图片点击可在新窗口打开查看此主题相关图片如下:aaa.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:bbb.png
图片点击可在新窗口打开查看




[此贴子已经被作者于2018/7/21 23:27:17编辑过]

--  作者:有点甜
--  发布时间:2018/7/22 17:48:00
--  
请上传具体实例测试。
--  作者:ZJZK2018
--  发布时间:2018/7/22 23:19:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:图表20180722.table


--  作者:有点甜
--  发布时间:2018/7/23 0:31:00
--  

\'\'\'========市内入围编号趋势图======
Dim Chart1 As WinForm.Chart \'定义一个图表变量
Dim Series1 As WinForm.ChartSeries \'定义一个图系变量
Dim tbn As Table = Tables("抽签入围台帐_Table1") \'定义一个变量t引用数据表
Chart1 = e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart1.ChartType = ChartTypeEnum.Bar \'设置图表类型
\'Chart.ChartType = ChartTypeEnum.Histogram \' 设置图表类型
Chart1.SeriesList.Clear() \'清除图表原来的图系
Chart1.AxisX.ClearValueLabel \'清除所有通过SetValueLabel设置的数值字符标示
Series1 = Chart1.SeriesList.Add() \'增加一个图系
Series1.Text = "市外入围编号趋势图" \'图例名称命名
tbn.Sort = "市外入围_编号"
Dim cnt As Integer = tbn.DataTable.Compute("Max(市外入围_编号)")
Series1.Length = cnt+1
For ii As Integer = 1 To cnt  \'  t.Rows.Count - 1 \'指定每个数据点的位置
    Series1.X(ii) = ii \'指定水平坐标
    Series1.Y(ii) = 0
Next
For i As Integer = 0 To tbn.Rows.Count - 1 \'指定每个数据点的位置   
    Series1.Y(tbn.Rows(i)("市外入围_编号")) = tbn.Rows(i)("市外入围_次数") \'指定垂直坐标
Next

Dim bChart1 As C1.Win.C1Chart.C1Chart  = Chart1.basecontrol  \'图标坐标轴如何设置字体颜色
Dim area1 = bChart1.ChartArea
area1.AxisX.ForeColor = Color.Red
area1.AxisY.ForeColor = Color.Blue  

\'Chart1.AxisX.AnnoWithLabels = True \'启用字符标示
Chart1.LegendVisible = True \'显示图列
Chart1.LegendCompass = CompassEnum.South \'图列显示在南方(底端)
Chart1.AxisX.AnnoRotation = - 45 \'X轴标示逆时针旋转45度
Dim fnt As New Font("黑体",9) \'设置字体
Chart1.AxisX.Font = fnt
Chart1.SeriesList(0).FitType = FitTypeEnum.Spline \'采用平滑线条

Dim lbls = bChart1.ChartLabels
For i As Integer = 1 To cnt  \'  t.Rows.Count - 1 \'指定每个数据点的位置
    Dim lbl As C1.Win.C1Chart.Label = lbls.LabelsCollection.AddNewLabel()
    lbl.Text = iif(series1.y(i) = 0, "", series1.y(i) & "次")
   
    lbl.AttachMethod = C1.Win.C1Chart.AttachMethodEnum.DataIndex
    lbl.AttachMethodData.GroupIndex = 0
    lbl.AttachMethodData.SeriesIndex = 0
    lbl.AttachMethodData.PointIndex = i
    lbl.Style.ForeColor = Color.Red
    lbl.style.font = new font("宋体", 15)
    lbl.Compass = LabelCompassEnum.South
    lbl.Visible = True
Next