Curseur avec des tiques
Je ne suis pas satisfait de l'apparence «étiquetée» du curseur dans Animate ou Manipulate. Au lieu de cela, je souhaite des ticks avec un multiple de pi sous le curseur.
Animate[Plot[Sin[x + phi], {x, 0, 2 Pi}], {phi, 0, 2 Pi,
Appearance -> "Labeled"}]
Quelle serait la meilleure façon de procéder? Idéalement, cela devrait ressembler à ceci:
Je ne pense pas que la solution donnée dans https://mathematica.stackexchange.com/a/8264est pratique voire élégant. En suivant cette logique d'ajout d'un axe supplémentaire, je ne peux pas lui donner l'apparence que je veux et, en général, cela semble très "artificiel".
Réponses
1. Vous pouvez utiliser HorizontalGaugecomme contrôle dans Manipulate:
Manipulate[Plot[Sin[x + phi], {x, 0, 2 Pi}],
{phi, 0, 2 Pi, Panel[HorizontalGauge[##, ScaleDivisions -> None,
Axes -> {True, False}, ImageSize -> 250,
Ticks -> {Transpose[{Subdivide[8], Subdivide[0, 2 Pi, 8]}], None}], #, Right] &}]
Pour n'autoriser que des valeurs discrètes, disons des multiples de Pi/4, pour la variable de contrôle phi:
Manipulate[Plot[Sin[x + phi], {x, 0, 2 Pi}],
{phi, 0, 2 Pi, Panel[HorizontalGauge[Dynamic[phi, (phi = Round[#, Pi/4]) &], ##2,
ScaleDivisions -> None, ImagePadding -> 15,
PlotRange -> {{0, 1}, Automatic},
Axes -> {True, False}, ImageSize -> 250,
Ticks -> {Thread[{Subdivide[8], Subdivide[## & @@ #2, 8], {0, .05}},
List, 2], None}], #, Right] &}]
2. Vous pouvez également utiliser un contrôle personnalisé du pauvre qui combine un curseur et un graphique vide avec un axe horizontal:
Manipulate[Plot[Sin[x + phi], {x, 0, 2 Pi}],
{phi, 0, 2 Pi, Labeled[Panel @ Column[{Slider[##, ImageSize -> 250],
Graphics[{}, Axes -> {True, False},
Ticks -> {Subdivide[## & @@ #2, 8], None}, ImageSize -> 250,
PlotRange -> {#2, {0, .05}}]}, Alignment -> Center,
Spacings -> 0], #, Right] &}]
3. Nous pouvons également modifier la fonction à ValueThumbSliderpartir du tutoriel / AdvancedManipulateFunctionality >> Apparences CustomControl pour obtenir un curseur personnalisé avec axe:
ClearAll[sliderWithAxis]
sliderWithAxis[Dynamic[var_], {min_, max_, d_}, o : OptionsPattern[]] :=
LocatorPane[Dynamic[If[! NumberQ[var], var = min];
{var, 0}, (var = First[#]) &],
Panel[Graphics[{Dynamic[
Polygon[Offset[#, {var, 0}] & /@ {{0, 5}, {-5, 15}, {5, 15}}]]},
o, ImageSize -> 300, ImagePadding -> {{15, 15}, {30, 5}},
Axes -> {True, False},
Ticks -> {{#, #, {0, .025}} & /@ Range[min, max, d], None},
PlotRange -> {{min, max}, {-1, 1}}, AspectRatio -> 1/10],
Dynamic[Style[Round[var, d], 16]], Right, Background -> LightBlue,
Alignment -> Center],
{{min, 0}, {max, 0}, {d, 0}}, Appearance -> None]
Manipulate[ Plot[{Sin[x + phi], Cos[x + psi]}, {x, 0, 2 Pi}],
{phi, 0, 2 Pi, Pi/4, sliderWithAxis[##] &},
{psi, 0, 2 Pi, Pi/2, sliderWithAxis[##] &}]