16

マウス カーソルが Wolfram|Alpha の 2D プロット上にある場合、x 軸と y 軸から離れた座標を読み取るのに役立つ一対の灰色の線が表示されます たとえば、次のエアリー関数のプロットで転換点の 1 つにマウスを置きます。

ウェブ

上記は Mathematica 内で以下を使用して取得することもできます

WolframAlpha["Plot Ai(x)", {{"Plot", 1}, "Content"}]

Nb

これには、座標を表示するある種のロケーターという追加の利点があります


通常の Mathematica グラフィックス/プロットでこのような動作をエミュレートするにはどうすればよいですか?

4

4 に答える 4

6

を使用した別のアプローチを次に示しNearestます。これは、サイモンのものとは少し異なります。

plot = Plot[{Sin[x], Cos[x]}, {x, -2 Pi, 2 Pi}];
With[{nf = Nearest[Flatten[Cases[Normal[plot], Line[p_, ___] :> p, Infinity], 1]]},
   Show[plot, 
      Epilog -> 
         Dynamic[DynamicModule[{
            pt = First[nf[MousePosition[{"Graphics", Graphics}, {0, 0}]]], 
            scaled = Clip[MousePosition[{"GraphicsScaled", Graphics}, {0, 0}], {0, 1}]
            }, 
           {
            {If[scaled === None, {}, 
               {Lighter@Gray, Line[{
                   {Scaled[{scaled[[1]], 1}], Scaled[{scaled[[1]], 0}]}, 
                   {Scaled[{1, scaled[[2]]}], Scaled[{0, scaled[[2]]}]}
                   }]
               }]}, 
            {AbsolutePointSize[7], Point[pt], White, AbsolutePointSize[5], Point[pt]},
            Text[Style[NumberForm[Row[pt, ", "], {5, 2}], 12, Background -> White], Offset[{7, 0}, pt], {-1, 0}]}
         ]]
    ]
 ]

これは、私が横たわっていた例からまとめられました。(ポイント トラッキングと組み合わせたフリー フローティング ドロップ ラインは好きではありません。どちらか一方だけでも問題ありません。)

于 2011-11-22T15:51:29.283 に答える
5

これは、複数のプロットの処理を除いて、Wolfram|Alpha 出力と同様に動作する私のバージョンです。W|A グラフィックでは、円とテキストは最も近い曲線にジャンプし、カーソルがグラフィック上にないときは完全に消えます。不足している機能を追加して、コードをより柔軟にするとよいでしょう。

WAPlot[fns_, range : {var_Symbol, __}] := 
 DynamicModule[{pos, fn = fns},
  If[Head[fn] === List, fn = First[Flatten[fn]]];
  LocatorPane[Dynamic[pos, (pos = {var, fn} /. var -> #[[1]]) &], 
   Plot[fns, range, Method -> {"GridLinesInFront" -> True},
    GridLines->Dynamic[{{#,Gray}}&/@MousePosition[{"Graphics",Graphics},None]]],
   AutoAction -> True, 
   Appearance -> Dynamic[Graphics[{Circle[pos, Scaled[.01]], 
       Text[Framed[Row[pos, ", "], RoundingRadius -> 5, 
         Background -> White], pos, {-1.3, 0}]}]]]]

次に、例えば

WAPlot[{{AiryAi[x], -AiryAi[x]}, AiryBi[x]}, {x, -10, 2}]

ここに画像の説明を入力


これは、円を最も近い曲線に移動させるために W 氏のコードのMousePosition代わりに使用し、それを盗んだ新しいバージョンです。LocatorPane動作はWolframAlpha出力とほぼ同じになりました。

WAPlot[fns_, range : {var_Symbol, __}] := 
 DynamicModule[{fnList = Flatten[{fns}]}, Plot[fnList, range,
   GridLines -> 
    Dynamic[{{#, Gray}} & /@ MousePosition[{"Graphics", Graphics}]],
   Method -> {"GridLinesInFront" -> True},
   Epilog -> Dynamic[With[{mp = MousePosition[{"Graphics", Graphics}, None]},
      If[mp === None, {}, 
       With[{pos = {#1, First@Nearest[fnList /. var -> #1, #2]}& @@ mp},
        {Text[Style["\[EmptyCircle]", Medium, Bold], pos], 
         Text[Style[NumberForm[Row[pos, ", "], 2], Medium], pos, 
          {If[First[MousePosition["GraphicsScaled"]] < .5, -1.3, 1.3], 0}, 
          Background -> White]}]]]]
   ]]

出力は以前のバージョンと非常によく似ているため、スクリーンショットは掲載しません。

于 2011-11-22T11:11:12.467 に答える
2

Jens-Peer Kuskaから:

Manipulate[myPosition = p;
 Plot[Sin[x], {x, 0, Pi}, 
  Epilog -> {Point[p], Text[p, p + {0.4, 0}]}], {{p, {0, 0}}, 
  Locator}]

マークマクルーアから:

labeledPointPlot[g_Graphics] := 
  Manipulate[
   Column[{Show[{g, Graphics@Point[pt]}], pt}], {pt, 
    Sequence @@ Transpose[PlotRange /. FullOptions[g]], Locator}];

labeledPointPlot[Plot[x^2, {x, -2, 2}]]

私は以前に書き留めた上記のコードの起源を見つけました:

http://www.mathkb.com/Uwe/Forum.aspx/mathematica/10416/Mathematica-6-Graphics-Options

于 2011-11-22T07:08:41.963 に答える