Я не думаю, что вы можете начать ось с любого места, кроме минимума.
(Связанный пост заставляет метки начинаться с другого значения.)
Так что нам нужно помочь с небольшим рисунком владельца.
Несколько кратких ссылок:
var ca = chart1.ChartAreas[0];
var ax = ca.AxisX;
var ay = ca.AxisY;
Теперь давайте скроем ось у:
ay.LineWidth = 0;
Чтобы нарисовать часть оси от смещения интервала до максимума, мы просто кодируем событие PostPaint
:
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
// add references..
..
// then use values to calulate pixel coordinates..
int py1 = (int)ay.ValueToPixelPosition(ay.Minimum + ay.IntervalOffset);
int py2 = (int)ay.ValueToPixelPosition(ay.Maximum);
int px = (int)ax.ValueToPixelPosition(ax.Maximum - ax.Minimum);
// blue to make it stand out
e.ChartGraphics.Graphics.DrawLine(Pens.Blue, px, py1, px, py2);
}
Результат:
Конечно, найти правильные значения для Interval
, IntervalOffset
, Minimum
и Maximum
- все зависит от вас ..
Обновление: Если вы хотите иметь полный набор укороченных линий сетки по оси X, вы можете сделать большую математику или использовать графическое преобразование. Как обычно, последнее намного проще ..:
Graphics g = e.ChartGraphics.Graphics;
int pyc = (int)ay.ValueToPixelPosition(ay.Minimum); // y-center
for (int i = 0; i < 360 / ax.Interval; i++)
{
g.TranslateTransform(px, pyc);
g.RotateTransform((float)(i * ax.Interval));
g.TranslateTransform(-px, -pyc);
g.DrawLine(Pens.colorOfYourChoice, px, py1, px, py2);
g.ResetTransform();
}
После установки ax.Interval = 30;
мы получаем такой результат: