11
votes

ZOOM Région et affichage comme un sous-champ dans la parcelle

est-il possible de zoomer dans une région et d'l'afficher comme un sous-champ dans la même parcelle? Voici ma tentative primitive chez FreeHand Graphics, d'illustrer ma question:

Entrez la description de l'image ici

Je peux penser à utiliser tracé , puis épilog , mais je me perds dans le positionnement et en donnant à l'intrigue sa propre origine (quand j'essaie EPILOG ON TRACE , la nouvelle parcelle repose sur l'ancien, en utilisant la vieille origine).

En outre, il serait bien que le positionnement du sous-champ puisse être entré, car différentes courbes ont différentes "régions vides" pouvant être utilisées pour positionner l'image.

J'ai vu cela dans plusieurs articles et je peux le faire à Matlab, mais je n'ai aucune idée de la façon de le faire dans MMA.


2 commentaires

Peut-être que cela vous intéressera web.ift.if.no/~szhorvat/mmatricks.php Regardez la section de zoom


Lien mort: web.ift.ift.uib.no/~szhorvat/mmatricks.php


4 Réponses :


6
votes

juste un kickstart: xxx

Entrez la description de l'image ici


0 commentaires

8
votes

Utilisez INSET. Voici un exemple: xxx

graphiques mathématica


3 commentaires

+1 Depuis la version 4.0 (publiée en 1999), FullOptions a été remplacée par les absolueurs . :RÉ


D'ailleurs, je me demande pourquoi je n'utilisais pas seulement des options? Les vieilles habitudes meurent lentement, je suppose.


Bel exemple! Mais il est probablement préférable d'utiliser protr au lieu de EPILOG dans de tels cas pour ne pas se chevaucher le graphique d'origine.



7
votes

et, empruntant de Code Belisarius , vous pouvez également sélectionner la mise au point de votre inset de manière interactive forte> en sélectionnant une position à l'axe X: xxx pré>

ou, si vous souhaitez également Placez l'encart de manière interactive: p> xxx pré>

edit strong> p>

Une autre alternative basée sur la question de dbjohn: p>

imgsz = 400;
f[x_] := Piecewise[{{Sin@x, Abs@x > .1}, {Sin[100 x], Abs[x] <= 0.1}}];

Manipulate[
 Plot[f[x], {x, -3, 3}, PlotRange -> {{-3, 3}, {-2, 5}}, 
  ImageSize -> imgsz, 
  Epilog -> 
   Inset[Plot[f[y], {y, p[[1]] - .3, p[[1]] + 0.3}, PlotStyle -> Red, 
     Axes -> False, Frame -> True, ImageSize -> imgsz/3], 
    Scaled[zw]]], {{p, {0, 0}}, Locator, 
  Appearance -> None}, {{zw, {0.5, 0.5}, "Zoom window"}, Slider2D}]


2 commentaires

+1 bonne solution. @Sjoerd C. de Vries Utilisation de cela, j'ai remarqué que la déplacement de l'encart puis en cliquant sur la parcelle "sauter" l'encart lorsque vous voulez vraiment que l'axe d'instance X axe axée, c'est-à-dire mélangé. Toute amélioration suggérée de travailler autour de cela? Peut-être un deuxième locator ...


@dbjohn Yep, j'ai remarqué cela aussi. Le clic passe toujours au localisateur le plus proche. Cela peut signifier qu'un clic sur la courbe peut déplacer la fenêtre de zoom s'il était plus proche que le point de la courbe que vous avez préalablement zoomé. J'ai pensé à utiliser des touches de modificateur ou donc (Ctrl-clic, etc.) mais cela le rendrait plus complexe que je ne suis prêt à faire pour le moment. Une autre solution peut être un curseur 2D pour sélectionner la position de la fenêtre de zoom.



2
votes

Je trouve cela une zone ayant besoin de meilleurs outils intégrés. Je travaille sur cette solution basée sur une démo ici . Je préfère avoir l'image zoomée et une image réformée séparée et comme bonus, j'ai ajouté une zone présentable dans laquelle on pourrait mettre des textes ou des équations pertinentes. Pour différentes fonctions, le format peut avoir besoin d'être modifié manuellement.

(f[x_] := 
   Piecewise[{{Sin@x, Abs@x > .1}, {Sin[100 x], Abs[x] <= 0.1}}];
 ; xMin = -3; yMin = -3; xMax = 3; yMax = 3; 
 Manipulate[
  Grid[{{LocatorPane[{a}, 
      Plot[f[x], {x, xMin, xMax}, 
       PlotRange -> {{xMin, xMax }, {yMin, yMax}}, 
       ImageSize -> Medium, AspectRatio -> 1, AxesOrigin -> {0, 0}]], 
     Plot[f[x], {x, (a[[1]]) + xMin*mag, (a[[1]]) + xMax*mag}, 
      PlotRange -> {(*{(a[[1]])+xMin*mag,(a[[1]])+xMax*
        mag},*){(a[[2]]) + yMin*mag, (a[[2]]) + yMax*mag}}, 
      ImageSize -> Medium, AspectRatio -> 1, AxesOrigin -> {0, 0}, 
      Frame -> True], 
     Item[StringForm["This is a suitable area to put any text.
       Value of A is :
       `1` ", a], Alignment -> {Left, Top}]}}, Frame -> All, 
   ItemSize -> All, 
   Spacings -> 5], {{a, {0, 0}}, {xMin, yMin}, {xMax, yMax}, Locator, 
   Appearance -> 
    Graphics[{Yellow, Opacity[.2], 
      Rectangle[Scaled[{.5 - (mag/2), .5 - (mag/2)}], 
       Scaled[{.5 + (mag/2), .5 + (mag/2)}]]}]}, {{mag, .06, 
    "Magnification"}, 0.01, 1, Appearance -> "Labeled"}])


0 commentaires