【问题标题】:How to plot a graph with the column plot between the axis如何使用轴之间的柱形图绘制图形
【发布时间】:2016-07-11 15:11:19
【问题描述】:

如何在 C# 中绘制两个轴之间的图形,如下所示:

这是我在 c# 和 Visual Studio 中使用图表控件的图表:

我想在两个轴之间绘制列系列,而不将第一列切到左边。

图表设置:

chart.ChartAreas[0].AxisX.Interval = 1;
chart.ChartAreas[0].AxisX.IsMarginVisible = false;
chart.ChartAreas[0].AxisX.IsStartedFromZero = true;

【问题讨论】:

    标签: c# .net visual-studio charts


    【解决方案1】:

    我想,我的尝试和错误找到了解决方案。这就是我所做的:

    // Create some null data point with integer value
    DataPoint nulldp1 = new DataPoint();
    nulldp1.SetValueXY(1, 0);
    
    DataPoint nulldp2 = new DataPoint();
    nulldp2.SetValueXY(2, 0);
    
    chart.Series["SeriesName"].Points.Add(nulldp1);
    chart.Series["SeriesName"].Points.Add(nulldp2);
    
    
    // Plotting the chart
    double index = 0.5;
    foreach (var item in items)
    {
        // The data point for each series
        DataPoint dp = new DataPoint();
        dp.XValue = index;
        dp.SetValueY(item.Percentage);
    
        chart.Series[item.Name].Points.Add(dp);
    
        index++;
    }
    

    我不知道这个解决方案是否可行。但是,最终它解决了我的问题。

    【讨论】:

    • 一种解决方法;这里不应该是必要的,但如果它有效,好的。
    • 空数据点是第一张图片所示间隙的解决方案。我只是装饰我的代码以确保首先满足需求。虽然我还是 C# 的新手,但我不知道我的行为是否是最好的。我在这里的帖子只是在这里寻求像你这样的专业知识。无论如何,感谢@TaW 的回复。
    【解决方案2】:

    你的设置有误。

    特别是设置IsMarginVisible = false; 会使列向左滑动,一半被切断。所以删除那行并保持默认的true

    此外,您还需要在间隔中添加Offset,这样它就不会开始将轴标记为负值..:

    Axis ax = chart.ChartAreas[0].AxisX;
    ax.Interval = 1;
    ax.IntervalOffset = 1;
    

    更新:如果你真的想消除差距,你应该设置要索引的系列:

    yourSeries.IsXValueIndexed = true;
    

    MSDN on this:

    备注

    一个系列中的所有数据点都使用顺序索引,如果这 属性为真,则数据点将按顺序绘制, 无论它们关联的 X 值如何。这意味着将有 没有“丢失”的数据点。

    例如,假设一个系列中有三 (3) 个数据点 X 值为 1、2 和 4。如果此属性为假,则会有 标记为“3”的 X 轴位置缺少数据点。但是,如果你 将此属性设置为 true,三个数据点将绘制在 1、2、4点,依次排列,不会有缺失数据 观点。标记为“3”的 X 轴位置不会出现在图表上。

    当您不想丢失数据点时,这很有用 您知道不会有数据的时间间隔,例如周末。

    如果您要显示多个系列并且至少有一个系列使用 索引 X 值,则所有系列都必须对齐——也就是说,有 相同数量的数据点——并且相应的点必须具有 相同的 X 值。

    请特别注意理解最后一段,特别是如果您想使用一些堆叠图表!

    使用IsXValueIndexed 设置的另一种方法是在间隙处插入空数据点。最好使用DataPoint.IsEmpty 属性。

    【讨论】:

    • 感谢@TaW。我刚刚删除了IsMarginVisible,添加了IntervalOffset = 1。结果返回相同。该列保持在同一位置。
    • 它在这里工作正常,如您所见。您需要告诉我们更多关于 x 值的信息。类型?它们是数字还是日期?还是它们是字符串?你是如何设置间隔的?另外:Axis.minimum,maximum?
    • 我想要标记/轴之间的柱形图。请参阅我实际帖子中的第一张图片。我希望这个数字能告诉你实际的需要。顺便说一句,谢谢你的建议。
    • 如果您想消除差距:请参阅我的更新。对不起,我真的不明白;仍然不确定。在第二次解释时使用不同的词是很重要的,而不是以前不理解/不清楚的词。你可能想扭转我对问题的编辑的部分内容..!?
    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多