Foxtable(狐表)用户栏目专家坐堂 → 求助,关于双图表


  共有4735人关注过本帖树形打印复制链接

主题:求助,关于双图表

帅哥哟,离线,有人找我吗?
晕了快扶我
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
求助,关于双图表  发帖心情 Post By:2013/5/20 23:05:00 [只看该作者]

想画个双图表,效果是让采购额和销售额同时做出来,左边是销售额,用Bar,右边是采购额,用XYPOTPLOT,弄了一晚上都只能一个,而且Y轴也不对,高手来指点下

Dim d1 As Date = Date.Today
Dim y As Integer = d1.Year '指定年份
Dim m As Integer = d1.Month
Dim w As Integer = d1.DayOfWeek
Dim q As Integer = (d1.Month - 1) \ 3 + 1 '计算现在是第几个季度
Dim dt1 As New Date(y, 1, 1)
Dim dt2 As New Date(y, 12, 31)
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "select * from {销售出库单主表}"
Dim dt As DataTable = cmd.ExecuteReader
Dim cmd1 As New SQLCommand
cmd1.C
cmd1.CommandText = "select * from {采购入库单主表}"
Dim dv1 As DataTable = cmd1.ExecuteReader
'===============================取时间,动态加载出入表
Dim Chart As WinForm.Chart = e.Form.Controls("统计图表")
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart.VisualEffect = True
Dim lst As List(Of String) = dt.GetUniqueValues("出库日期>= '" & dt1 & "'And 出库日期 <='" & dt2 & "'", "月份") '获得销售月份集合
Dim lst1 As List(Of String) = dv1.GetUniqueValues("到仓日期>= '" & dt1 & "'And 到仓日期 <='" & dt2 & "'", "月份") '获得采购月份集合
Chart.ChartType = ChartTypeEnum.Bar
Chart.ChartType2 = ChartTypeEnum.XYPlot
Chart.AxisX.ClearValueLabel
Chart.AxisX.AnnoWithLabels = False
Chart.SeriesList.Clear() '清除图表原来的图系
Series = Chart.SeriesList.Add() '增加一个图系
Series.Text = "销售额"
Chart.SeriesList2.Clear() '清除图表2原来的图系
Series = Chart.SeriesList2.Add() '给图表2增加一个图系
Series.Text = "采购额"
Series.Length = lst.Count '设置图系的长度
For i As Integer = 0 To lst.Count - 1 '指定每个数据点的位置
    Series.X(i) = i '指定水平坐标
    Series.Y(i) = dt.Compute("Sum(总金额)","月份 = '" & lst(i) & "'") '指定销售额垂直坐标

    For p As Integer = 0 To lst1.count -1
        Series.Y2(p) = dv1.Compute("Sum(总金额)","月份 = '" & lst1(p) & "'")‘指定采购额垂直坐标
    Next

    Chart.AxisX.SetValueLabel(i, lst(i)&"月") '指定字符表示
Next
Chart.LegendVisible =True
Series.DataLabelText = "{#YVAL}"
Series.DataLabelText = "{#Y2VAL}"
series.DataLabelCompass =LabelCompassEnum.NorthEast
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.AxisY.Text = "销售额"
Chart.AxisY2.Text = "采购额"

[此贴子已经被作者于2013-5-20 23:09:19编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/5/21 6:22:00 [只看该作者]

没有数据,怎么测试你的代码?

做个内部表或者access数据源的例子也可以啊


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/21 11:34:00 [只看该作者]

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

例子

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/21 12:34:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/5/21 12:51:00 [只看该作者]

你只设置了一个图系的数据,当然只显示一个图。

 

 

Dim d1 As Date = Date.Today
Dim y As Integer = d1.Year '指定年份
Dim m As Integer = d1.Month
Dim w As Integer = d1.DayOfWeek
Dim q As Integer = (d1.Month - 1) \ 3 + 1 '计算现在是第几个季度
Dim dt1 As New Date(y, 1, 1)
Dim dt2 As New Date(y, 12, 31)
Dim cmd As New SQLCommand
cmd.CommandText = "select * from {销售出库单主表}"
Dim dt As DataTable = cmd.ExecuteReader
Dim cmd1 As New SQLCommand
cmd1.CommandText = "select * from {采购入库单主表}"
Dim dv1 As DataTable = cmd1.ExecuteReader
'===============================取时间,动态加载出入表
Dim Chart As WinForm.Chart = e.Form.Controls("统计图表")
Dim Series1 As WinForm.ChartSeries '定义一个图系变量
Dim Series2 As WinForm.ChartSeries '定义一个图系变量

Chart.VisualEffect = True
Dim lst As List(Of String) = dt.GetUniqueValues("出库日期>= '" & dt1 & "'And 出库日期 <='" & dt2 & "'", "月份") '获得销售月份集合
Dim lst1 As List(Of String) = dv1.GetUniqueValues("到仓日期>= '" & dt1 & "'And 到仓日期 <='" & dt2 & "'", "月份") '获得采购月份集合
Chart.ChartType = ChartTypeEnum.Bar
Chart.ChartType2 = ChartTypeEnum.XYPlot
Chart.AxisX.ClearValueLabel
Chart.AxisX.AnnoWithLabels = False
Chart.SeriesList.Clear() '清除图表原来的图系
Series1 = Chart.SeriesList.Add() '增加一个图系
Series1.Text = "销售额"
Chart.SeriesList2.Clear() '清除图表2原来的图系
Series2 = Chart.SeriesList2.Add() '给图表2增加一个图系
Series2.Text = "采购额"
Series1.Length = lst.Count '设置图系的长度
Series2.Length = lst.Count '设置图系的长度
For i As Integer = 0 To lst.Count - 1 '指定每个数据点的位置
    Series1.X(i) = i '指定水平坐标
    Series2.X(i) = i '指定水平坐标
    Series1.Y(i) = dt.Compute("Sum(总金额)","月份 = '" & lst(i) & "'") '指定销售额垂直坐标
    For p As Integer = 0 To lst1.count -1
        Series2.Y(p) = dv1.Compute("Sum(总金额)","月份 = '" & lst1(p) & "'")'指定采购额垂直坐标
    Next
    Chart.AxisX.SetValueLabel(i, lst(i)&"月") '指定字符表示
Next
Chart.LegendVisible =True
Series1.DataLabelText = "{#YVAL}"
Series1.DataLabelText = "{#Y2VAL}"
Series2.DataLabelText = "{#YVAL}"
Series2.DataLabelText = "{#Y2VAL}"
series1.DataLabelCompass =LabelCompassEnum.NorthEast
series2.DataLabelCompass =LabelCompassEnum.NorthEast
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.AxisY.Text = "销售额"
Chart.AxisY2.Text = "采购额"


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/21 13:21:00 [只看该作者]

狐爸,这样做出来总感觉怪怪的,如果共用一个X,Y轴,用BAR表示销售额,用XYPLOT表示采购额呢?

 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20130521132030.jpg
图片点击可在新窗口打开查看
像教程里的双图表的第一种..

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/21 13:25:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20130521132441.jpg
图片点击可在新窗口打开查看
现在作出来像这个样子的

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1195 积分:7040 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/21 13:28:00 [只看该作者]

因为销售额的Y轴和采购额的Y轴差距不是很大,X轴又是共用的,示例里的是来自于同一张表,我就被搞晕了..

另外数值的显示怎么是乱码的?


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/5/21 14:19:00 [只看该作者]

你可以四舍五入:

 

 

Series1.Y(i) = math.Round(dt.Compute("Sum(总金额)","月份 = '" & lst(i) & "'") ,2)


 回到顶部