设置为对数

时间:2018-12-20 23:06:57

标签: c# mschart

我有一个图表,它是一个柱形图,在x轴上从0.3变为10.0。

设置为线性时效果很好。

我想为用户提供将其设置为对数刻度的选项。确实会将x轴更改为对数比例,但是比例不正确。它只是显示0和3作为我的比例尺上的点。

我猜它正在尝试执行0.3、3、30、300,但我想将其显示为0.001、1、10、100等。

我的线性图表: enter image description here

我的相同数据的日志图表: enter image description here

我的代码:

private void do_Size_PM10_Chart()
{
    int currentBin = 0;
    int prevBin = 0;
    int countSum = 0;

    if (MCAList.Count < 4095)
        return;

    this.BeginInvoke((MethodInvoker)delegate
    {
        chartSizePM10.ChartAreas[0].AxisX.IsLogarithmic = false;
        chartSizePM10.Series.Clear();
    });

    Series s = new Series("Counts");
    s.ChartType = SeriesChartType.Column;
    s.IsVisibleInLegend = false;

    for (double i = (Spline[0].Size + BinSize); 
                i <= Spline[Spline.Count - 1].Size; i += BinSize)
    {
        currentBin = mMath.getBin(i, Spline);

        for (int j = prevBin; j < currentBin; j++)
        {
            countSum += MCAList[j];
        }

        s.Points.AddXY(i, countSum);
        //Console.WriteLine("Size, {0}, Counts, {1}", i, countSum);

        countSum = 0;
        prevBin = currentBin;
    }

    this.BeginInvoke((MethodInvoker)delegate
    {
        chartSizePM10.ChartAreas[0].AxisX.Title = "Size (μ)";
        chartSizePM10.ChartAreas[0].AxisY.Title = "Counts";

        chartSizePM10.ChartAreas[0].AxisX.LabelStyle.Format = "{0.###}";
        chartSizePM10.ChartAreas[0].AxisY.LabelStyle.Format = "{0}";

        if (radioButtonLogSize.Checked)
        {
            chartSizePM10.ChartAreas[0].AxisX.Minimum = 0.001;
            chartSizePM10.ChartAreas[0].AxisX.Maximum = Spline[Spline.Count - 1].Size;
            chartSizePM10.ChartAreas[0].AxisX.Interval = 0;
        }
        else
        {
            chartSizePM10.ChartAreas[0].AxisX.Minimum = Spline[0].Size;
            chartSizePM10.ChartAreas[0].AxisX.Maximum = Spline[Spline.Count - 1].Size;
            chartSizePM10.ChartAreas[0].AxisX.Interval = 0;
        }

        chartSizePM10.ChartAreas[0].AxisX.IsLabelAutoFit = true;
        chartSizePM10.ChartAreas[0].RecalculateAxesScale();

        chartSizePM10.Series.Add(s);

        if (radioButtonLogSize.Checked)
        {
            chartSizePM10.ChartAreas[0].AxisX.IsLogarithmic = true;
            chartSizePM10.ChartAreas[0].AxisX.LogarithmBase = 10;
        }
    });
}

我尝试设置轴间隔,但是它没有任何改变,在对数刻度上,它仍然仅显示3作为间隔标​​记。

编辑: @TaW,我使用了您在该答案中提供的代码,并且我的坐标轴不变。我认为这是因为我的图表设置了线性绘图的特定方式。当我删除所有代码的最小,最大和间隔时,它的效果更好,现在我的主要刻度线也越来越好。但是我仍然无法使用您提供的代码来显示较小的刻度线,这里有任何建议吗?

我尝试过:

chartSizePM10.ChartAreas[0].AxisX.MinorGrid.Interval = 0.1;
chartSizePM10.ChartAreas[0].AxisX.MinorGrid.Enabled = true;

但是这没有用。这是我当前的图表: enter image description here

还有其他建议吗?

0 个答案:

没有答案