8

I have used Manipulate in conjunction with Plot to draw a function's graph and I would like to show the current x-axis value and function value while hovering over the function's plot. How can I achieve this?

Thanks.

dabd
  • 839
  • 4
  • 13

2 Answers2

10

Alternative that avoids the flicker of Tooltip (copying & adapting @Nasser):

f[x_, a_] := Sin[a x^3];
p = {0, 0};
Manipulate[
 EventHandler[
  Plot[f[x, a], {x, -Pi, Pi}, 
   Prolog -> Dynamic@{Thin, 
       Line[{{p[[1]], 0}, {p[[1]], f[ p[[1]], a]}, {0, f[ p[[1]], a]}}], 
       Point[{p[[1]], f[ p[[1]], a]}]}, 
   PlotLabel -> 
    Dynamic@{p[[1]], f[ p[[1]], a]}],
  {"MouseMoved" :> (p = If[# =!= None, #, p] &@MousePosition["Graphics"])}],
{{a, 1, "a?"}, .1, 5, .1}]

Manipulate output

It also takes advantage of Plot's adaptive graphing methods to deal with wiggly graphs.

Michael E2
  • 235,386
  • 17
  • 334
  • 747
  • Thanks, it looks interesting but I can't understand that code yet. – dabd Jan 10 '13 at 17:53
  • +1 for showing the lines of projection onto the axes. But I don't like that you get a pair of coordinates even when the cursor isn't on the curve. – murray Jan 10 '13 at 18:54
  • @murray Thanks. If asked, I could post a version in which the coordinates and projection lines disappear. It's more complicated - perhaps I don't know the best way - and the OP seems to like Nasser's straightforward solution. – Michael E2 Jan 10 '13 at 20:25
  • Yep, that's a dupe. I won't answer in that latest topic so feel free to include my comment into your answer there. ps. there is a nice syntax to keep last used coordinates after mouse exits: p = MousePosition["Graphics", p]. – Kuba Jul 14 '16 at 20:36
9
Manipulate[
 Module[{tbl},
  tbl = Table[Tooltip[{x, Sin[a x]}], {x, -Pi, Pi, .1}];
  ListLinePlot[tbl, Mesh -> All, MeshStyle -> Opacity[0]]
  ],
 {{a, 1, "a?"}, .1, 5, .1}
 ]

Mathematica graphics

Nasser
  • 143,286
  • 11
  • 154
  • 359
  • Perfect! Thanks. – dabd Jan 10 '13 at 11:10
  • Nice, straightforward coding and a result where the coordinates appear only when the cursor is on the curve. Only limitation is the granularity of the Tooltip iterator. – murray Jan 10 '13 at 18:55
  • @dabd It would be considered gracious if you were to accept Nasser's solution (click the checkmark), since you consider it a good solution for you. – Michael E2 Jan 10 '13 at 19:49