Comment puis-je dessiner une grille derrière des graphiques sans utiliser Plot?


9

Je veux montrer une sommation vectorielle simple mais je ne sais pas comment dessiner une grille derrière les vecteurs. Je suis assez sûr que je peux le faire avec Mathematica mais comment?

Il devrait ressembler à ceci:

Vector summation

+2

Si vous incluez votre code pour dessiner les vecteurs, je suis sûr que nous pouvons vous aider à dessiner la grille. 26 août. 132013-08-26 02:30:38

10

GridLines œuvres dans Graphics

Graphics[{ 
    {Thick, Darker[Red], Arrow[{{0, 0}, {1, 1}}]}, 
    {Dashed, Arrow[{{0, 0}, {1, 0}}]}, 
    {Dashed, Arrow[{{1, 0}, {1, 1}}]}, 
    Text[Style["R", Italic, Large], {.5, .5}, {0, -1}], 
    Text[Style["\[Theta]", Large], {.2, .1}, {-1, 0}] 
    }, GridLines -> Automatic, GridLinesStyle -> LightGray, 
PlotRange -> {{-1, 2}, {-.5, 1.5}}, Frame -> True 
] 

Mathematica graphics

  0

+1. Je travaillais sur un exemple comme celui-ci.Seule différence significative, j'utilise 'PlotRangePadding', qui est indépendant de l'endroit où les flèches sont positionnées. :) 26 août. 132013-08-26 02:49:36

  0

@Anon En fait 'PlotRangePadding' est une bonne idée; J'espère que cela ne vous dérange pas si je l'incorpore dans ma réponse. 26 août. 132013-08-26 05:57:01


16

Mathematica pour vous a beaucoup de Graphicsprimitives de travailler avec, comme ainsi que directives tels que Thick, Dashed, Red, etc. Je vais utiliser Arrow ci-dessous.

Vous pouvez spécifier la valeur de l'option GridLines en tant que fonction. L'utilisation de GridLines -> Range donnera des lignes sur une grille 1: 1 à partir de l'extrême en bas à gauche du graphique, comme défini avec PlotRange ou déterminé automatiquement.

Si vous voulez que les lignes de la grille à enclenchent toujours à des positions entières, même si le PlotRange n'est pas limitée par des valeurs entières, vous pouvez utiliser:

GridLines -> (Range[⌊#⌋, ⌈#2⌉]&) 

lignes de la grille sur un 2: grille 2 peut être dû avec Range[⌊#⌋, ⌈#2⌉, 2] &, etc.

je construire une fonction comme celle-ci:

draw[a : {x_, y_}, b : {X_, Y_}, opts : OptionsPattern[]] := 
Graphics[{ 
    {Thick, Blue, Dashed, Arrow[{a, {X, y}}], Arrow[{{X, y}, b}]}, 
    {Thick, Red, Arrow[{a, b}]} 
    }, 
    opts, 
    GridLines -> (Range[⌊#⌋, ⌈#2⌉]&), 
    GridLinesStyle -> Directive[Thick, LightBlue] 
] 

et de l'utiliser:

draw[{0, 0}, {7, 3}, PlotRangePadding -> 2] 

enter image description here

Non inclus ici sont les étiquettes que vous pouvez ajouter ou avec TextInset.

Pour une explication des options de traitement dans la fonction définie voir: Functions with Options


Cette réponse ne vise pas à être une référence pour l'utilisation de GridLines, seule une illustration d'une utilisation: le style de papier millimétré . Néanmoins Kuba suggère que je mentionne Method -> {"GridLinesInFront" -> True} et je pense que c'est une bonne idée. Cette option dessine les lignes de la grille devant tous vos graphiques sauf ceux du Epilog, s'il existe.

draw[{0, 0}, {7, 3}, PlotRangePadding -> 2, Method -> {"GridLinesInFront" -> True}] 

enter image description here

Voir ma réponse à Changing the background color of the framed region of a plot pour un exemple qui utilise à la fois "GridLinesInFront" et Epilog.

  0

Mr Wizard, avez-vous (un lien vers) une explication de la façon dont votre fonction Gridlines connaît les slots qu'elle devrait utiliser lors de l'évaluation? 26 août. 132013-08-26 20:23:41

  0

@wilbert the [documentation] (http://reference.wolfram.com/mathematica/ref/GridLines.html) pour GridLines dit: "* func * - une fonction à appliquer à * Xmin *, * Xmax * à obtenir l'option de la grille " 26 août. 132013-08-26 20:28:50

  0

Je vois cela, mais je suis en train de lutter pour comprendre la syntaxe formelle. ici func semble saisir le PlotRange de Graphics? 26 août. 132013-08-26 20:45:58

  0

@wilbert Oui, je crois que c'est comme ça que ça fonctionne. Je ne pense pas que cela soit très clair, mais il y a beaucoup d'exemples dans la documentation, en commençant par [celui-ci] (http://reference.wolfram.com/mathematica/ref/GridLines.html#814353806). 26 août. 132013-08-26 21:06:50