7
votes

Le locator sort de la région graphique

Lorsque j'exécute le code suivant xxx pré>

graphiques Mathematica p>

Je m'attends à ce que la commande de localisation soit dans les limites du premier graphique, mais elle peut plutôt être déplacée autour de la région GraphicsGrid. Y a-t-il une erreur dans mon code? P>

J'ai également essayé p> xxx pré>

au lieu de p> xxx pré>

Mais cela se comporte complètement faux. P>

update strong> p>

Merci à tout le monde, c'est ma solution finale: p>

Manipulate[
 distr1 = BinormalDistribution[p1, {1, 1}, \[Rho]1];
 distr2 = BinormalDistribution[p2, {1, 1}, \[Rho]2];
 Grid[
  {
   {Graphics[{Locator[p1], Locator[p2]}, 
     PlotRange -> {{-5, 5}, {-5, 5}}]},
   {Plot3D[{PDF[distr1, {x, y}], PDF[distr2, {x, y}]}, {x, -5, 5}, {y, -5, 5}, PlotRange -> All]}
   }],
 {{\[Rho]1, 0}, -0.9, 0.9}, {{\[Rho]2, 0}, -0.9, 0.9},
 {{p1, {1, 1}}, Locator},
 {{p2, {1, 1}}, Locator}
 ]


3 commentaires

Y a-t-il une raison pour laquelle vous n'avez pas simplement placé la ligne dans un locatorpane [] ? Cela vous aurait permis de rendre le localisateur assis précisément sur l'emplacement où il a un effet, à savoir la fin du segment de la ligne.


@David Carraher Ce n'est qu'un petit exemple. Dans mon ordinateur portable, il faut deux localisateurs qui choisiront deux paires de coordonnées X et Y pour les moyens de deux distributions binimomiques qui seront affichées sur un graphique 3D. Donc, celles-ci devraient être deux graphes distincts.


S'il vous plaît voir ma réponse mise à jour.


3 Réponses :


5
votes

Je ne suis pas sûr de ce que vous essayez d'atteindre. Je vois un certain nombre de problèmes, mais je ne sais pas quoi parler. Peut-être que vous voulez juste un simple slider2d code> construction?

DynamicModule[{pt = {{-1, 3}, {1, 1}}},
 Column[{
   LocatorPane[Dynamic[pt], 
     Framed@Graphics[{}, PlotRange -> {{-5, 5}, {-5, 5}}]],
   Dynamic@
    Plot3D[{x^2 pt[[1, 1]] + y^2 pt[[1, 2]],
           -x^2 pt[[2, 1]] - y^2 pt[[2, 1]]},
        {x, -5, 5}, {y, -5, 5}]
 }]
]


1 commentaires

J'ai utilisé deux objets Slider2D, mais je préfère avoir deux localisateurs sur le même graphique.



7
votes

Si vous examinez l'INPUTFORD, vous constaterez que GraphicsGrid renvoie un objet graphique. Ainsi, le localisateur se déplace effectivement tout au long de l'image.

Manipulate[
 Grid[{
   {Graphics[Locator[p], Axes -> True,
     PlotRange -> {{-3, 3}, {-3, 3}}]},
   {Graphics[Line[{{0, 0}, p}], Axes -> True,
     PlotRange -> {{-3, 3}, {-3, 3}}]}},
  Frame -> All],
 {{p, {1, 1}}, Locator}]


4 commentaires

Je voté cela, mais vous n'avez pas besoin localisateur dans le premier graphiques morceau; C'est redondant.


En effet, Max a utilisé une sorte de spécification rectangle (BL, TR) pour la gamme, tandis que le MMA utilise une spécification {Xrange, Yrange}


@ M.Wizard, voulez-vous dire celui à graphiques [localisateur [p], axes-> true ... . Je pense que c'est nécessaire, en supprimant cela crée une erreur pour moi. Semble être nécessaire pour la façon dont la manipulation évalue les choses. Pourriez-vous expliquer ce que vous vouliez dire par ce commentaire?


@dbjohn graphiques [{}, Plottrange -> ... est adéquat. Dans manipuler la ligne {{p, {1, 1}}, localisateur} génère déjà un localisateur; Vous n'avez pas besoin de le faire deux fois.



6
votes

locatorpane [] code> fait un bon travail de confination du localisateur à une région.

Il s'agit d'une variation de la méthode utilisée par M. Wizard. P>

Column[{LocatorPane[Dynamic[pt3],Framed@Graphics[{Line[{{-1, 0}, Dynamic@pt3}]},
 ImageSize -> 150, PlotRange -> 3]]}]


2 commentaires

En fait, je voulais avoir deux graphiques. Un 2D pour sélectionner une paire de coordonnées X et Y et le second est 3D pour afficher deux distributions binomiales avec des moyens correspondant aux coordonnées du localisateur. Mais votre solution fonctionne bien. Merci.


@belisarius je fais ce genre de chose tout le temps.