ZedGraph v. 5.15, выравнивание по нескольким осям Y - PullRequest
2 голосов
/ 13 января 2011

Проблема, с которой я сталкиваюсь, заключается в использовании двух осей Y (y1 и y2), в которых значение y1 равно: (min, max) = (ноль, положительный), а значение y2 (min, max) = (отрицательное, положительным), в таком случае нулевая разметка y1 совпадает с максимальным (отрицательным) значением оси y2 (через ось x), что является проблемой, поскольку я хочу, чтобы нулевая точка обеих осей y выровнялась вместе.

Если бы я знал значение min и max для обеих осей y, то эту проблему можно было бы легко решить, но я знаю только, начинается ли диапазон с положительного или отрицательного значения, а не само значение.

Обратите внимание, что эта проблема не существует, когда обе оси Y имеют значения (точки данных) выше нуля. Они автоматически выравниваются так, что обе их нулевые точки проходят через ось X.

1 Ответ

0 голосов
/ 04 апреля 2017

Мне удалось сделать это, установив пропорцию между осями:

public void SetY1Y2CommonZero()
{
   AxisChange();

   ZedGraph.Scale source, dest;

   if (GraphPane.YAxis.Scale.Min != 0)
   {
       source = GraphPane.YAxis.Scale;
       dest = GraphPane.Y2Axis.Scale;
   }
   else if (GraphPane.Y2Axis.Scale.Min != 0)
   {
       source = GraphPane.Y2Axis.Scale;
       dest = GraphPane.YAxis.Scale;
   }
   else
   {
       return;
       // do nothing - both axis have 0 on min...
   }


   double proportion =  source.Max / source.Min;

   // we want to ENLARGE the other axis accordingly:
   if (proportion * dest.Min > dest.Max)
       dest.Max = proportion * dest.Min;
   else
       dest.Min = dest.Max / proportion;
}
...