直方图/柱形图未显示一直到底部的条形图

时间:2014-02-06 19:48:00

标签: c# charts histogram

我正在尝试使用C#.NET Chart控件(System.Windows.Forms.DataVisualization.Charting)绘制直方图。

我把它设置为柱形图。使用NMath库通过Histogram对象检索数据,因此它会对所有分类进行分类。在将y轴切换到对数刻度之前,一切看起来都很好。为了让事情显而易见,我将任意bin的DataPoint设置为0条目,使y值为0.001而不是0.然后将y轴的最小值设置为0.1,将max设置为超出最大bin的值。结果是所有列都以y值1开始而不是最小值。任何具有0个条目的bin都有一个向下延伸的列(朝向0.001)。截图可用here

设置轴上最小/最大/间隔的代码如下。

double ymin = FindMinimumYValue();
double mag = Math.Floor(Math.Log10(ymin));
ymin = Math.Pow(10, mag);
yAxis.Minimum = ymin;
double ymax = FindMaximumYValue();
mag = Math.Ceiling(Math.Log10(ymax));
ymax = Math.Pow(10, mag);
yAxis.Maximum = ymax;

yAxis.Interval = 1;
yAxis.MajorGrid.Interval = 1;
yAxis.MajorTickMark.Interval = 1;
yAxis.MinorGrid.Interval = 1;
yAxis.MinorTickMark.Interval = 1;

我可能没有在我需要的轴上设置属性,但有没有办法让列从y轴上的最小值向上延伸,即使该最小值小于1?

ETA:如果我从系列中删除了0个计数的DataPoints,我不再得到0.1和1之间的向下条。但是,所有其他条仍然从1开始向上,而不是从最小值开始。

再次使用ETA:我想我可以使用RangeColumn类型的图表,并指定每个bin的min和max y值。这似乎不是很优雅,因为当用户将轴切换到log模式并返回时,我需要在RangeColumn和Column类型之间切换,或者继续调整RangeColumn数据点的最小y值(从0到0.1和背部)。这似乎更像是一种解决方法而不是解决方案。

3 个答案:

答案 0 :(得分:1)

解决方法是为每个x值添加Y值为0的数据点。

    Series = chart1.Series.Add("Test");
    Axis yAxis = chart1.ChartAreas[0].AxisY;
    yAxis.IsLogarithmic = true;
    double ymin = 0.1;
    yAxis.Minimum = ymin;
    double ymax = 100;
    yAxis.Maximum = ymax;

    Series.Points.Add(new DataPoint(1, 3));
    Series.Points.Add(new DataPoint(1, 0));
    Series.Points.Add(new DataPoint(2, 3));
    Series.Points.Add(new DataPoint(2, 0));
    Series.Points.Add(new DataPoint(3, 4));
    Series.Points.Add(new DataPoint(3, 0));
    Series.Points.Add(new DataPoint(4, 5));
    Series.Points.Add(new DataPoint(4, 0));

答案 1 :(得分:0)

我最终将其更改为RangeColumn类型的图表,并根据需要设置范围的最小值和最大值。

答案 2 :(得分:0)

有些混乱,但是您需要将交叉值设置为Double值的绝对最小值。 即 yAxis.Crossing = -1.7976931348623157E + 308;