【问题标题】:Microsoft Chart stacked columns grouped with non-stackedMicrosoft Chart 堆叠列与非堆叠分组
【发布时间】:2011-08-08 08:03:21
【问题描述】:

我希望显示 4 个组的数据。每组有 1 个堆叠列和 1 个非堆叠列。这是我所追求的模型:

获得四个组很容易,这给了我想要的:

Series series = chart.Series.Add("Budget");
series.ChartType = SeriesChartType.Column;
series.Name = "Budget";
series.Points.Add(55);
series.Points.Add(10);
series.Points.Add(50);
series.Points.Add(50);

series  = chart.Series.Add("Actual");
series.ChartType = SeriesChartType.Column;
series.Name = "Actual";
series.Points.Add(80);
series.Points.Add(90);
series.Points.Add(10);
series.Points.Add(10);

现在我想让黄色条形堆叠条形。我已经尝试添加 3 个系列; ChartType = 列、StackedColumn、StackedColumn。但是堆叠列出现在非堆叠列的前面。

我正在尝试的可能吗?

【问题讨论】:

  • 我也有同样的需要。你找到解决方案了吗?

标签: c# asp.net mschart


【解决方案1】:

在 Series 下调用 CustomPropertiesMethod 并为组分配不同的 StackedGroupName,例如,如果您希望 Series 1 和 2 堆叠但希望 Series 3 在旁边

Series1.CustomProperties = "StackedGroupName=Group1"; Series2.CustomProperties = "StackedGroupName=Group1"; Series3.CustomProperties = "StackedGroupName=Group2";

【讨论】:

    【解决方案2】:

    我可能错了,但该系列的显示顺序与添加顺序相同。

    【讨论】:

    • 它们按添加顺序出现。但是当我将 Column 和 StackedColumn 结合起来时,它们看起来是重叠的,而不是彼此相邻。
    • 您是在将系列添加到图表区域之前还是之后设置图表类型?
    【解决方案3】:

    我处理它的方法是伪造 X 轴数据,使其在“真实”点的任一侧偏移,然后使用自定义标签。我不容易粘贴。经过测试的代码,但我认为它是这样的:

    double pointWidth = 0.375;
    double pointOffset = pointWidth * 0.5;
    // Add first series - column
    _Chart.Add("Series1");
    _Chart.Series["Series1"].ChartType = SeriesChartType.Column;
    _Chart.Series["Series1"]["PointWidth"] = pointWidth.ToString();
    for (int ii = 0; ii < 10; ii++)
    {
      _Chart.Series["Series1"].Points.AddXY(ii - pointOffset, YourYValueHere);
    }
    // Add second series - stacked column
    _Chart.Add("Series2");
    _Chart.Series["Series2"].ChartType = SeriesChartType.Column;
    _Chart.Series["Series2"]["PointWidth"] = pointWidth.ToString();
    for (int ii = 0; ii < 10; ii++)
    {
      _Chart.Series["Series2"].Points.AddXY(ii + pointOffset, YourYValueHere);
    }
    // Add thrid series - stacked column
    _Chart.Add("Series3");
    _Chart.Series["Series3"].ChartType = SeriesChartType.Column;
    _Chart.Series["Series3"]["PointWidth"] = pointWidth.ToString();
    for (int ii = 0; ii < 10; ii++)
    {
      _Chart.Series["Series3"].Points.AddXY(ii + pointOffset, YourYValueHere);
        _Chart.ChartAreas["Area1"].AxisX.CustomLabels.Add(
         ii - 0.5, ii + 0.5, ii);
    }
    _Chart.ChartAreas["Area1"].AxisX.Minimum = -0.5;
    _Chart.ChartAreas["Area1"].AxisX.Maximum =
                  _Chart.Series["Series3"].Points.Count - 0.5;
    _Chart.ChartAreas["Area1"].AxisX.LabelStyle.IsEndLabelVisible = true;
    _Chart.ChartAreas["Area1"].AxisX.IsMarginVisible = false;
    

    不过,如果 StackedGroupName 有效,它会简单得多。我要试试。

    【讨论】:

    • 无法让 StackedGroupName 在 .NET 框架 3.5 中工作。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多