Our Winforms Charts provide support for tooltips. In this blog we will discuss way to display movable Y-Axis as chart tooltip. The implementation is quite simple. We need to capture the data points and then create a false Y-Axis over the chart. To start with first we need to capture the position of the mouse when it hovers over the chart. We will save the X and Y position using Move event of C1Chart,
private void c1Chart1_MouseMove(object sender, MouseEventArgs e)
{
X = e.X;
Y = e.X;
Invalidate(true);
}
Next thing to do is to create a false Y-Axis which can be displayed over the chart. For this we will handle the Paint event of C1Chart and draw a line using Graphics.DrawLine() method.
Graphics g = e.Graphics;
g.DrawLine(pen, X, c1Chart1.ChartArea.PlotArea.Location.Y, X, c1Chart1.ChartArea.PlotArea.Location.Y + c1Chart1.ChartArea.PlotArea.Size.Height);
Next we need to populate this line with the Chartdataseries points for the Y-Axis and draw the values over the false Y-Axis. So our Paint event would be as follows :
private void c1Chart1_Paint(object sender, PaintEventArgs e)
{
if (X > 75 && X < 700)
{
Graphics g = e.Graphics;
g.DrawLine(pen, X, c1Chart1.ChartArea.PlotArea.Location.Y, X, c1Chart1.ChartArea.PlotArea.Location.Y + c1Chart1.ChartArea.PlotArea.Size.Height);
double numofpoints = c1Chart1.ChartArea.AxisY.Max - c1Chart1.ChartArea.AxisY.Min;
double unitmajor = c1Chart1.ChartArea.AxisY.UnitMajor;
double ymin = c1Chart1.ChartArea.AxisY.Min;
float x = 0, ypoint = 0;
for (int i = 0; i <= (int)numofpoints / unitmajor; i++)
{
c1Chart1.ChartGroups[0].DataCoordToCoord(0, ymin + (i * unitmajor), ref x, ref ypoint);
g.DrawString((ymin + (i * unitmajor)).ToString(), new Font("Microsoft Sans Serif", 8.25f), new SolidBrush(Color.Red), X, ypoint - 5);
ypoint = ypoint - (25 * (float)unitmajor);
}
}
}
Now when we on hovering mouse over C1Chart, we can see a movable Y-Axis in the tooltip. Download Sample