グリッドに注釈を付けるには?


6

Iは、線形関数fのための部分的な表である以下のグリッドを有し、[X]:

f[x_] := 2 x + 3 
Grid[Join[{{x, y}}, Table[{i, f[i]}, {i, 0, 4}]], 
Dividers -> {{2 -> Directive[Red, Thin]}, {2 -> 
Directive[Red, Thin]}}, Alignment -> {Right, Center}] 

私は何をしたいことの傾きとy切片を示すために、このグリッドを注釈でありますF [x]は、以下のグラフィックが示すように:

enter image description here

私は自分自身で点線の楕円と色の矢印を描画する方法を見つけ出すことができます。私が把握できないのは、これらのグラフィカルアノテーションをグリッドに追加する方法です。これは可能ですか?

(F [x]は「オンザフライ」で定義され、そう静止画像を含むことが可能な解決策ではないであろうことに留意されたい。)

+2

(...など、色を追加します)。このようなことにGraphicsを使用してください。矢印、円、線、楕円など...これらはグラフィックスのものです。グリッドは、汎用グラフィックボード用ではなく、構造化データの基本的な制御を目的としています。 26 8月. 132013-08-26 23:50:41

  0

@Nasser:理想的には、Show、Overlayなどを使ってGraphicsにグラフィックスをオーバーレイすることができます。しかし、これはうまくいきません。これは間違った構成であると私は反対しなければならない。 26 8月. 132013-08-26 23:54:09

  0

これは間違った構成です。あなたはグラフィックスが必要で、GraphicsGridを使い、Graphicsを使って他のアイテムを描画します。グリッドはグラフィックではありません。 26 8月. 132013-08-26 23:55:33

  0

'Grid'を' Rasterize'すると 'Show'を使うことができます。ベクターグラフィックス(.eps、.svg)をエクスポートしない限り、これは実行可能な方法です。 27 8月. 132013-08-27 00:26:11

+1

@Nasser:おそらく、GraphicsGridを使ってこのテーブルをグラフィックスで実現する方法の例を投稿することができます。 GraphicsGridを使用して、矢印などで別のセルを接続する必要性を緩和する方法はわかりません。 27 8月. 132013-08-27 00:29:06

  0

このようなテーブルとグラフィックスの組み合わせが、私が欲しいことばかりであることは何度もあります。 Mathematicaで簡単に実装できる方法はないように思えます。 27 8月. 132013-08-27 01:26:40

8

あなたのケースでは、GridGraphicsGridの最大の利点でありますあなたは数字のグリッド上での追加要素を配置することができますEpilogオプション:

f[x_] := 2 x + 3 
GraphicsGrid[ 
Join[{{Style[x, 36], Style[y, 36]}}, 
    Table[{Style[i, 36], Style[f[i], 36]}, {i, 0, 4}]], 
Dividers -> {{2 -> Directive[Red, Thin]}, {2 -> 
    Directive[Red, Thin]}}, Alignment -> {Right, Center}, 
Epilog -> { 
    {Dashed, Circle[{480, -570}, {400, 136}]}, 
    {Blue, Arrow[{{679, -567}, {1028, -1000}}], 
    Arrow[{{679, -1000}, {1028, -1000}}]}, 
    {Black, Text[Style[2, 26], {1058, -1000}]} 
    }, ImagePadding -> {{0, 70}, {0, 0}} 
] 

Mathematica graphics

の座標を決定するために少し不便です3210を使用していますが、Manipulate内の個々の要素を使って遊んで、どこの図形を取得することができます。

  0

うわー、ありがとう!私は今それを試し、矢印の座標を見つける "自動化"する方法を見つけることができるかどうかを見てみましょう。 27 8月. 132013-08-27 01:24:46


6

GraphicsGridを使用した例が掲載されているので、ここでは直接グラフィックを使用した例です。

データをプレゼンテーションから分離しようとするとよいでしょう。また、Mathematicaを使用しているので、もう少し自動化しようとします。

この関数は、データのリストをそのまま引き出します。 2つのパラメーターのみを使用します。これは修正または提供できます。テーブルにはx、yの間隔があります。説明する関数の周りに小さな操作があります。必要に応じて簡単に調整することができます。あなたがやっていることのために構築間違っ

enter image description here

Manipulate[ 

Module[{i}, 
    data = Table[{i, f[i]}, {i, 0, n}]; 
    tbl[data, delX, delY] ], 

{{n, 4, "how big?"}, 2, 20, 1}, 
{{delX, 0.06, "x spacing?"}, 0.02, 0.1, 0.01}, 
{{delY, 0.03, "y spacing?"}, 0.02, 0.1, 0.01}, 

Initialization -> 
    (
    f[x_] := 2 x + 3; 

    tbl[lst_List, delX_, delY_] := 
    Module[{n = Length[lst], sideItem = 2}, 

    getRow[i_, y_] := {Text[ Style[lst[[i, 1]], Large], {0, y}], 
     Text[ Style[lst[[i, 2]], Large], {delX, y}]}; 
    getArrowDown[j_] := Arrow[{{1.08 delX, j}, {1.5 delX, j - delY}}]; 
    getArrowRight[j_] := Arrow[{{1.08 delX, j}, {1.5 delX, j}}]; 
    getSideItem[j_] := Text[Style[sideItem, Large], {1.6 delX, j}]; 

    [email protected][ 
     { 
     Text[Style["x", Italic, Large], {0, 0}], 
     Text[Style["y", Italic, Large], {delX, 0}], 

     Table[getRow[i, -i*delY], {i, n}], 
     Table[getArrowDown[-i*delY], {i, n - 1}], 
     Table[getArrowRight[-i*delY], {i, 2, n}], 
     Table[getSideItem[-i*delY], {i, 2, n}], 

     Line[{{delX/2,delY/2}, {delX/2, -(n + 1)*delY}}],(*vertical line*) 
     Line[{{-delX/2, -delY/2}, {1.5 delX, -delY/2}}] ,(*horizontal line*) 
     {Dashed, Circle[{delX/2, -delY}, {delX, 0.4 delY}]} 
     }, 
     PlotRange -> {{-.03, .2}, {.03, -.4}},Frame->False, Axes->False,ImageSize->300 
     ]   
    ]; 
    ) 
] 
  0

これは本当にいいですね。結果だけでなく、コードの記述方法。あなたが気にしないなら、 'Text @ Graphics'は何をしますか? 27 8月. 132013-08-27 10:25:50

  0

@Anon、ここではおそらく必要ありません。それは習慣です。私は通常、最上位の評価用のグラフィックスや返された式を、テキストを表示するためのものであるText @で囲みます。埋め込み式のテキストをよりよく見せます。比較: 'Text [Row [{" test "}]]' vs 'Row [{" test "}]'たとえば、だから、Text @ですべてをラップするのではなく、Text @を全部囲みます。この例では、すでにテキストが内部にあるので、必要ないかもしれません。しかし、私が言ったように、私はちょうどそこに習慣によってそれを投げる;) 27 8月. 132013-08-27 10:31:10

  0

私はそれが知っていることはよく分かります。 Ty。 27 8月. 132013-08-27 14:16:04