以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]图表标志线  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194981)

--  作者:azlm100
--  发布时间:2025/2/13 13:29:00
--  [求助]图表标志线
图片点击可在新窗口打开查看
单元格图表有这个标志线代码。想在chart图表中也添加这个标志线,不知道有没有代码可以实现?

图片点击可在新窗口打开查看
使用了堆积柱状图,然后再添加了一个线状图来当标志线。但是线状图的刻度除了问题,无法跟第一图系的对其。有办法可以取消右边刻度然后这个28能采用左边的刻度来显示?


附上代码

Chart = e.Form.Controls("Chart2") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'设置图表类型
Chart.ChartType2 = ChartTypeEnum.XYPlot \'图表2类型该为线形
Chart.SeriesList.Clear() \'清除图表原来的图系
chart.AxisX.ClearValueLabel
chart.AxisY.ClearValueLabel
Series = Chart.SeriesList.Add() \'增加一个图系
Dim b As Integer = b
Series.Length = lst4.Count \'图系的数据点数等于表的行数
Series.Text = "平日加班"
For k As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
    Series.X(k) = k \'指定水平坐标
    Dim dttr As DataRow
    \'dttr = dtt.Find("cus_xi = \'" & lst3(k) & "\' and bd >= \'" & dt3 & "\' And bd <= \'" & dt4 & "\'")
    dttr = dt.Find("empname = \'" & lst4(k) & "\' and bd = \'" & dt3 & "\'") \'=====个人平均加班
    If dttr IsNot Nothing Then
        Series.Y(k) = CInt(Format(dttr("平时加班"), "0")) 
    Else
        Series.Y(k) = 0
    End If
    Chart.AxisX.SetValueLabel(k, lst4(k)) \'指定字符表示
Next
Series.FillColor = Color.Green
series.MarkShape = MarkShapeEnum.None
Series.TooltipText = "{#YVAL}"
Series.DataLabelText = "{#YVAL}"
series.DataLabelForeColor = Color.blue
Series.DataLabelCompass = LabelCompassEnum.North
Series = Chart.SeriesList.Add() \'给图表2增加一个图系
Series.Length = lst4.Count \'图系的数据点数等于表的行数
Series.Text = "休出加班"
For ii As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
    Series.X(ii) = ii \'指定水平坐标
    Dim dttr As DataRow
    dttr = dt.Find("empname = \'" & lst4(ii) & "\' and bd = \'" & dt3 & "\'") \'=====个人平均加班
    If dttr IsNot Nothing Then
        Series.Y(ii) = CInt(Format(dttr("休出加班") , "0"))
    Else
        Series.Y(ii) = 0
    End If
    Chart.AxisX.SetValueLabel(ii, lst4(ii)) \'指定字符表示
Next
Series.FillColor = Color.LightBlue
Chart.Stacked = True
Series.TooltipText = "{#YVAL}"
Series.DataLabelText = "{#YVAL}"
Series.DataLabelCompass = LabelCompassEnum.North
Dim mm As Integer = Chart.AxisY.Max
Chart.SeriesList2.Clear() \'清除图表原来的图系
Series = Chart.SeriesList2.Add() \'给图表2增加一个图系
Series.Length = lst4.Count \'图系的数据点数等于表的行数
Series.Text = "加班标志线"
For iii As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
        Series.X(iii) = iii \'指定水平坐标
        Series.Y(iii) = 28
Next

Chart.AxisY.MinorTick = False \'Y轴不显示副刻度
Chart.AxisX.AnnoRotation = - 45
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass = CompassEnum.South \'图列显示在南方(底端)
Chart.AxisX.AnnoWithLabels = True \'启用字符标示


这个28是不固定

[此贴子已经被作者于2025/2/13 13:32:49编辑过]

--  作者:有点蓝
--  发布时间:2025/2/13 13:34:00
--  
参考|:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=55270
--  作者:azlm100
--  发布时间:2025/2/13 13:54:00
--  
图片点击可在新窗口打开查看
下载的文件打开就提示这个啊

是我电脑问题吗

[此贴子已经被作者于2025/2/13 14:41:22编辑过]

--  作者:有点蓝
--  发布时间:2025/2/13 15:10:00
--  
应该是吧。我下载可以正常打开。换台电脑安装商业版打开试试
--  作者:azlm100
--  发布时间:2025/2/14 13:31:00
--  
图片点击可在新窗口打开查看


我按照示例里面修改,怎么不出线的

Chart = e.Form.Controls("Chart2") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'设置图表类型
Chart.ChartType2 = ChartTypeEnum.XYPlot \'图表2类型该为线形t
Chart.SeriesList.Clear() \'清除图表原来的图系
chart.AxisX.ClearValueLabel
chart.AxisY.ClearValueLabel
Series = Chart.SeriesList.Add() \'增加一个图系
Dim b As Integer = b
Series.Length = lst4.Count \'图系的数据点数等于表的行数
Series.Text = "平日加班"
For k As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
    Series.X(k) = k \'指定水平坐标
    Dim dttr As DataRow
    dttr = dtt.Find("empname = \'" & lst4(k) & "\' and bd = \'" & dt3 & "\'") \'=====个人平均加班
    If dttr IsNot Nothing Then
        Series.Y(k) = CInt(Format(dttr("平时加班"), "0")) 
    Else
        Series.Y(k) = 0
    End If
    Chart.AxisX.SetValueLabel(k, lst4(k)) \'指定字符表示
Next
Series.FillColor = Color.Green
series.MarkShape = MarkShapeEnum.None
Series.TooltipText = "{#YVAL}"
Series.DataLabelText = "{#YVAL}"
series.DataLabelForeColor = Color.blue
Series.DataLabelCompass = LabelCompassEnum.North
Series = Chart.SeriesList.Add() \'给图表2增加一个图系
Series.Length = lst4.Count \'图系的数据点数等于表的行数
Series.Text = "休出加班"
For ii As Integer = 0 To lst4.Count - 1 \'指定每个数据点的位置
    Series.X(ii) = ii \'指定水平坐标
    Dim dttr As DataRow
    dttr = dtt.Find("empname = \'" & lst4(ii) & "\' and bd = \'" & dt3 & "\'") \'=====个人平均加班
    If dttr IsNot Nothing Then
        Series.Y(ii) = CInt(Format(dttr("休出加班") , "0"))
    Else
        Series.Y(ii) = 0
    End If
    Chart.AxisX.SetValueLabel(ii, lst4(ii)) \'指定字符表示
Next
Series.FillColor = Color.LightBlue
Chart.Stacked = True
Series.TooltipText = "{#YVAL}"
Series.DataLabelText = "{#YVAL}"
Series.DataLabelCompass = LabelCompassEnum.North
Chart.AxisY.MinorTick = False \'Y轴不显示副刻度
Chart.AxisX.AnnoRotation = - 45
Chart.LegendVisible = True \'显示图列
Chart.LegendCompass = CompassEnum.South \'图列显示在南方(底端)
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

Dim C1Cha As C1.Win.C1Chart.C1Chart = Chart.BaseControl
C1Cha.ChartGroups(0).ChartData.TrendsList.clear
Dim tl As C1.Win.C1Chart.TrendLine = C1Cha.ChartGroups(0).ChartData.TrendsList.AddNewTrendLine()
tl.LineStyle.Color = Color.red\'线条颜色 
tl.LineStyle.Thickness = 2 \'线宽 
tl.LineStyle.Pattern = 0 \'直线样式 0-5  
Dim zxb = New TbszLine()
zxb.SetXY(New PointF( - 0.5, 28), New PointF(Series.Length, 28))
zxb.SetText("均线")
tl.CustomTrendLine = zxb

--  作者:有点蓝
--  发布时间:2025/2/14 13:52:00
--  
请上传实例测试
--  作者:azlm100
--  发布时间:2025/2/14 14:16:00
--  
老师我做了一个示例,也是不出辅助线的。

帮忙看下。难道是因为堆积柱状图原因吗

还是说开发版问题?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:辅助线测试.foxdb



--  作者:有点蓝
--  发布时间:2025/2/14 14:49:00
--  
确实是堆叠的原因,去掉Chart.Stacked = True就可以

只能考虑使用第二个图表做了

Chart.SeriesList2.Clear() \'清除图表原来的图系
Series = Chart.SeriesList2.Add() \'给图表2增加一个图系
Series.Text = "均线"
Series.Length = t.Rows.Count
chart.AxisY2.ForeColor = Color.White
chart.AxisY2.GridMajorVisible = False
chart.AxisY2.GridMinorVisible = False
chart.AxisY.Max = 40 ‘设置Y轴的最大值,和图1一致
chart.AxisY.Min = 0 \'设置Y轴的最小值,和图1一致
Series.LineThickNess = 2
Series.LineColor = Color.Red
Series.MarkSize = 0
For k As Integer = 0 To t.Rows.Count \'指定每个数据点的位置
    Series.X(k) = k \'
    Series.Y(k) = 28 \'指定均线值
Next

--  作者:azlm100
--  发布时间:2025/2/14 15:17:00
--  
图片点击可在新窗口打开查看
这个第二图系我试过一次。也是这个刻度对不齐问题。第一图系的刻度是可变可增长的。到了月底可能就去到50了。所以我尝试不固定刻度。
但是这个第二图系的位置一直对不齐。
老师发的固定0-40我生成的也对不齐。


--  作者:有点蓝
--  发布时间:2025/2/14 15:46:00
--  
根据表格里的值,找出最大值和最小值,把2个图表的Y轴都设置一样即可