HeatMapChart - How to show a label when Mouse hovers over Chart


https://www.nevron.com/Forum/Topic10696.aspx
Print Topic | Close Window

By joern kunze - 8 Years Ago
Hi Experts,

I have a HeatMapChart like the following:
https://www.nevron.com/forum/uploads/images/5be95721-1d09-4f17-bbee-979e.jpg

now I want to show a label with the X and Y  and the according values when the Mouse hovers over the chart. Is there an easy way to do so?

I tried it with an NRectangularCallout together with a new Controller:

[Serializable]
  public class MyDataLabelTool : NTool {
  
   #region Constructor
   public MyDataLabelTool() {
   }
   #endregion

   #region Overrides

   public override void OnMouseMove(object sender, Nevron.Chart.Windows.NMouseEventArgs e) {
    NControlView view = (NControlView)this.GetView();
    NHitTestCacheService hitTestService = GetView().GetServiceOfType(typeof(NHitTestCacheService)) as NHitTestCacheService;
    if (hitTestService == null)  return;

    NHitTestResult result = new NHitTestResult(hitTestService.HitTest(new NPointF(e.X, e.Y)) as NChartNode);
    INMouseService mouseService = (INMouseService)GetView().GetServiceOfType(typeof(INMouseService));
    if (result.ChartElement == ChartElement.DataPoint) {
      mouseService.Cursor = Cursors.SizeAll;
      int fX = result.HeatMapDataPointX;
      int fY = result.HeatMapDataPointY;

      int iIndex = result.DataPointIndex;
      double fValue = ((NHeatMapSeries)(result.Chart.Series[0])).Data.Values[iIndex];
      Console.WriteLine("Index: " + iIndex.ToString() + " X:" + fX.ToString() + " Y:" + fY.ToString() + " Value: " + fValue.ToString("N2"));
// up to here it is working => on the output window the correct values are displayed


      NRectangularCallout m_RectangularCallout = (NRectangularCallout)result.Chart.Series[0].Tag;
      NDataPointAnchor anchor = new NDataPointAnchor(result.Chart.Series[0], iIndex, ContentAlignment.MiddleCenter, StringAlignment.Center);
      m_RectangularCallout.Anchor = anchor;      // anchor still has no series at this point (series==null)
      m_RectangularCallout.Text = " X:" + fX.ToString() + " Y:" + fY.ToString() + " Value: " + fValue.ToString("N2");
      m_RectangularCallout.Visible = true;

// no error here - but also no Label
    }
    else {
      mouseService.Cursor = mouseService.DefaultCursor;
    }

   }
   #endregion



The Controller itself seems to get the correct values when the mouse is moved - but the anchor point seems to be wrong. After doing:
NDataPointAnchor anchor = new NDataPointAnchor(result.Chart.Series[0], iIndex, ContentAlignment.MiddleCenter, StringAlignment.Center);

the anchor.Series is still null - and no Label is shown.

Thanks for helping,
Best regards,
Joern

By Nevron Support - 8 Years Ago

Hi Joern,

The heat map series does not support expose anchor coordinates for the callout - you may need to use a different type of anchor - for example axs scale point anchor - check out the Panels \ Annotations \ General example on how to create such an anchor. Let us know if you meet any problems or have any questions.

By joern kunze - 8 Years Ago
... thanks for the hint - now I got it working:

   m_RectangularCallout.Anchor = new NScalePointAnchor(nChartControl1.Charts[0],
                    (int)StandardAxis.PrimaryX,
                    (int)StandardAxis.PrimaryY,
                    (int)StandardAxis.Depth,
                    AxisValueAnchorMode.Clip, new NVector3DD(1, 2, 0));

Best regards,
Joern