Page 1 of 1
Axis Title alignment issue
Posted: Wed Mar 20, 2019 12:42 pm
by mobusek
Hello, I'm trying to sort through the different Axis Title and Label options to make sure that Axis Titles are aligned. If you look at the image below, you can see the placement of the Y Axis Titles seems determined by that axis' Labels. A longer Label pushes the Title further out. What I'm hoping to achieve is have the right-edge of all Titles align. So in this case, the bottom 3 Titles would move left to align with the top outermost title.
Is there any way to either automatically or manually achieve this kind of Title alignment? Thank you!
- Michael
Re: Axis Title alignment issue
Posted: Thu Mar 21, 2019 8:48 am
by ArctionKestutis
Hello,
The Axis Title could be positioned at fixed distance from Axis. For that you should set
axisY.Title.DistanceToAxis property and disable
_chart.ViewXY.AxisLayout.YAxisTitleAutoPlacement.
Only thing that you need is the distance's estimate. Here is my suggestion how you can do it in Axis.RangeChanged event handler (this is general solution for YAxes position on the left or on the right, but Title rotate by 90 deg):
Code: Select all
private void YAxis_RangeChanged(object sender, RangeChangedEventArgs e)
{
// Estimate YAxis Title position
float lCoord = float.MaxValue;
float rCoord = float.MinValue;
LightningChartUltimate chart = (sender as AxisY).OwnerView.OwnerChart;
System.Drawing.Rectangle rect = chart.ViewXY.GetMarginsRect();
// get left most YAxes point
foreach (AxisY axisY in chart.ViewXY.YAxes)
{
if (!axisY.Visible)
{
continue;
}
// get axis area, which includes Axis-line and Labels
RectangleXY axRect = axisY.GetActiveAxisArea();
if (axRect.Width == 0)
{
// axis not yet rendered
continue;
}
// if Axis on the left edge
if (axRect.X < rect.X && lCoord > axRect.X)
{
lCoord = axRect.X;
}
// if Axis on the right edge
if (axRect.X >= (rect.X + rect.Width) && rCoord < (axRect.X + axRect.Width) )
{
rCoord = (axRect.X + axRect.Width);
}
}
if (lCoord == float.MaxValue && rCoord == float.MinValue)
return;
// set Y Title to fixed position from Axis
chart.BeginUpdate();
// set Y Title to fixed position from Axis
chart.ViewXY.AxisLayout.YAxisTitleAutoPlacement = false;
foreach (AxisY axisY in chart.ViewXY.YAxes)
{
if (!axisY.Visible)
{
continue;
}
// get axis area, which includes Axis-line and Labels
RectangleXY axRect = axisY.GetActiveAxisArea();
if (axRect.Width == 0)
{
// axis not yet rendered
continue;
}
// if Axis on the left edge
if (axRect.X < rect.X && lCoord != float.MaxValue)
{
axisY.Title.HorizontalAlign = YAxisTitleAlignmentHorizontal.Left;
axisY.Title.DistanceToAxis = (axRect.X + axRect.Width) - (int)lCoord + 5;
}
// if Axis on the right edge
if (axRect.X >= (rect.X + rect.Width) && rCoord != float.MinValue)
{
axisY.Title.HorizontalAlign = YAxisTitleAlignmentHorizontal.Right;
axisY.Title.DistanceToAxis = (int)rCoord - axRect.X + 5;
}
}
chart.EndUpdate();
}
Hope this helps.
Re: Axis Title alignment issue
Posted: Fri Mar 22, 2019 7:41 pm
by mobusek
Thank you very much! Your suggestion was very helpful, I believe we've fixed the issue.