0

我需要显示几天内多条生产线的利用率百分比。所以我的 Y 轴将是 % 值。我每天都需要每条生产线的酒吧。所以我的 X 轴将是一组列,每个列标记为生产线,然后分组并标记为日期。我将如何使用 MSchart 执行此操作。

以下是我需要的示例。它仅显示 2 条生产线(我需要显示 2 条以上的生产线),并且 X 轴标签中不包含生产线名称。

在此处输入图像描述

我快到了。这是我正在创建的图表的图像:

在此处输入图像描述

这是创建它的代码:

Private Sub ChartSetup()
    Try
        dvCapacityUtilization.RowFilter = ""
        dvCapacityUtilization.Sort = "Period ASC, CutUpSet ASC"
        Me.cuChart.BeginInit()
        With Me.cuChart
            .ChartAreas(0).AxisX.Interval = 30
            .ChartAreas(0).AxisX.LabelStyle.Format = "MM/yy"
            .ChartAreas(0).AxisX.LabelStyle.Angle = -90
            .ChartAreas(0).AxisY.MajorGrid.LineColor = Color.Gray
            .ChartAreas(0).AxisX.MajorGrid.LineColor = Color.White
            .ChartAreas(0).AxisX.MinorGrid.LineColor = Color.White
            .DataBindCrossTable(dvCapacityUtilization, _
                "CutUpSet", "Period", "CapacityUtilization", "Label = CapacityUtilization")
        End With
        '
        For Each series In Me.cuChart.Series
            series.IsValueShownAsLabel = False
            series.LabelFormat = "0.0%"
            series.SetCustomProperty("PointWidth", "0.5")
            series.SetCustomProperty("DrawingStyle", "Cylinder")
            series.XValueType = DataVisualization.Charting.ChartValueType.Date
        Next
        Me.cuChart.EndInit()
    Catch ex As Exception
        ErrHandler(Me.Name & " - Chart Setup", ex)
    End Try
End Sub
  1. 如何关闭值标签?在我的代码中,我使用了 IsValueShownAsLabel = False 但它们仍然显示。我最终将允许用户打开或关闭这些值。
  2. 如何将值格式化为 XX.X%。在我的代码中,我使用了 LabelFormat = 0.0% 但这不起作用。
  3. 如何让 X 轴标签成为与数据值关联的日期。在我的代码中,我使用 AxisX.Interval = 30 来获取图表上的标签。

跟进:如上面#1所述,我使用了 series.IsValueShownAsLabel = False 但值标签仍然显示。要删除它们,我必须执行以下操作:

对于 series.Points 中的每个点 point.Label = String.Empty Next

为什么我必须这样做而不是使用 IsValueShownAsLabel = False?

4

1 回答 1

1

WINFORM : 终于找到了一些R&D。请按照以下步骤操作。

1. 在新的winform中从工具箱中拖放新的图表控件。

2.删除默认的“Series1”,因为它是根据列值动态生成的。

3.假设我们有以下示例数据表。

 public DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("UtilizationDate", typeof(DateTime));
            dt.Columns.Add("ProductionLine", typeof(string));
            dt.Columns.Add("UtilizationValue", typeof(int));

            DataRow dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy01";
            dr[2] = 25;
            dt.Rows.Add(dr);          

            dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy02";
            dr[2] = 15;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy03";
            dr[2] = 125;
            dt.Rows.Add(dr);



            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy01";
            dr[2] = 13;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy02";
            dr[2] = 111;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy03";
            dr[2] = 77;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy01";
            dr[2] = 13;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy02";
            dr[2] = 111;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy03";
            dr[2] = 77;
            dt.Rows.Add(dr);

            return dt;
        }

4. 现在使用 DataBindCrossTable 添加以下代码行。

chart1.ChartAreas["ChartArea1"].AxisX.IntervalType = DateTimeIntervalType.Months;
            chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-yy";
            DataTable dt = GetDataTable();
            chart1.DataBindCrossTable(dt.DefaultView, "ProductionLine", "UtilizationDate", "UtilizationValue", "Label=UtilizationValue");



            foreach (Series item in chart1.Series)
            {              
                item.IsValueShownAsLabel = true;
                item["PixelPointWidth"] = "50";
                item["DrawingStyle"] = "Cylinder";
                item.XValueType = ChartValueType.DateTime;
            }
于 2013-10-29T11:16:12.710 回答