Шкала оси отображает неправильное значение
В ZedGraph вы можете легко нарисовать XY график. Давайте используем масштаб по умолчанию для оси X и пользовательский масштаб (от 0 до 10, основной шаг 2.5, второстепенный шаг 1) для Y, а затем перерисовываем график:
public Form1()
{
InitializeComponent();
zedGraphControl1.GraphPane.YAxis.Scale.Min = 0;
zedGraphControl1.GraphPane.YAxis.Scale.Max = 10;
zedGraphControl1.GraphPane.YAxis.Scale.MajorStep = 2.5;
zedGraphControl1.GraphPane.YAxis.Scale.MinorStep = 1;
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
}
Который будет отображать это:
Как вы видете, 3
а также 8
являются 2.5
а также 7.5
отображается в неправильном формате. Вот как ZedGraph решает, какой формат использовать:
internal void SetScaleMag(double min, double max, double step)
{
// set the scale magnitude if required
if (this._magAuto)
{
// Find the optimal scale display multiple
double minMag = Math.Floor(Math.Log10(Math.Abs(this._min)));
double maxMag = Math.Floor(Math.Log10(Math.Abs(this._max)));
double mag = Math.Max(maxMag, minMag);
// Do not use scale multiples for magnitudes below 4
if (Math.Abs(mag) <= 3)
{
mag = 0;
}
// Use a power of 10 that is a multiple of 3 (engineering scale)
this._mag = (int)(Math.Floor(mag / 3.0) * 3.0);
}
// Calculate the appropriate number of dec places to display if required
if (this._formatAuto)
{
int numDec = 0 - (int)(Math.Floor(Math.Log10(this._majorStep)) - this._mag);
if (numDec < 0)
{
numDec = 0;
}
this._format = "f" + numDec.ToString(CultureInfo.InvariantCulture);
}
}
Что здесь приводит к f0
, Очевидно, это не правильно. Я мог бы просто добавить 1 к numDec
но это будет отображать бесполезную информацию для XAxis (0,20;0,40...)
Я знаю, что если я использую такие значения, как 10/3d
В качестве основного шага я никогда не смогу потерять информацию, но я предпочел бы отображать 6,7 вместо 7 (уменьшите ошибку).
Есть ли способ это исправить?