У меня есть диаграмма, это столбчатая диаграмма, которая идет от 0,3 до 10,0 по оси X.
Работает нормально при установке на линейный.
Я хочу дать пользователю возможность установить его в логарифмическом масштабе.Он действительно меняет ось X на логарифмический масштаб, но масштабирование не является правильным.Это просто показывает 0 и 3 как точки на моей шкале.
Я предполагаю, что он пытается сделать 0,3, 3, 30, 300, но я хотел бы показать его как 0,001, 1, 10, 100 и т. Д.
Моя линейная диаграмма:
Мой журнал с теми же данными:
Мой код:
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;
Но это не сработало.Вот мой текущий график:
Есть еще предложения?