Winform Charting直方图 - 从bin的开始到结束绘制条形图

时间:2017-04-20 05:54:58

标签: c# winforms charts

我尝试使用Winforms C#中的标准图表库创建合适的直方图。目前我的直方图如下:

enter image description here

    var dataPointSeries = new System.Windows.Forms.DataVisualization.Charting.Series
    {
        Name = chartName,
        Color = Colors.blue,
        IsVisibleInLegend = false,
        ChartType = SeriesChartType.Column,
        MarkerStyle = MarkerStyle.None,
        BorderWidth = 1,
        BorderColor = Color.White


    };
    for (int i = 0; i < data.hDataPoints.Count(); i++)
    {
        dataPointSeries.Points.AddXY(Charts.Functions.RoundValue(data.hDataPoints[i].fromBin), data.hDataPoints[i].probability);
    }

    chart.Series.Add(dataPointSeries);
    chart.Series[0]["PointWidth"] = "1";

我遇到的问题是条形图未正确显示。对于直方图,条形图需要从较低的bin开始并在较高的bin处结束。图表控件在上部或下部纸槽的中间绘制条形,具体取决于您选择哪一个作为X数据点。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您显示的是自动默认显示。

如果要更改它,则需要在X轴中编码所需的正确值。

看起来你想要这个:

Axis ax = chart.ChartAreas[0].AxisX;

ax.Minimum = -500;
ax.Maximum = 5500;
ax.Interval = 1000;
ax.IntervalOffset = -500;

enter image description here

请注意,数据点列之间总是有一个小的间隙,而边界处有一半......

另请注意,在柱形图中,每列(或多列图表,每组数据点)在x轴值处始终居中。其他任何东西都会误导!列的开始/结束即左/右没有任何意义!! Columns只是关于他们的中心

如果您想要其他任何内容(如果您正在制作直方图,则不会这样做),您将使用Area类型图表。

如果你发现这种反直觉的习惯通过想象添加另一个Series并且原则会变得清晰......

如果您确定需要将列与值范围相关联,则只需将其x值设置为该范围的中间位置..:

        ax.Interval = 1000;
        ax.IntervalOffset = 0;
        ax.Minimum = 0;
        ax.Maximum = 6000;
         foreach (DataPoint dp in chart.Series[0].Points) dp.XValue += ax.Interval/2;

enter image description here

再次注意数据点列之间的间隙以及边界处的一半......