Проблема с осью X при установке на логарифмическую - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть диаграмма, это столбчатая диаграмма, которая идет от 0,3 до 10,0 по оси X.

Работает нормально при установке на линейный.

Я хочу дать пользователю возможность установить его в логарифмическом масштабе.Он действительно меняет ось 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

Есть еще предложения?

...