代码之家  ›  专栏  ›  技术社区  ›  Baddack

设置为对数时X轴有问题

  •  1
  • Baddack  · 技术社区  · 6 年前

    当设置为线性时,效果很好。

    我想给用户一个选项,将其设置为对数刻度。它确实将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 回复  |  直到 6 年前
    推荐文章