Control deslizante con garrapatas
No estoy satisfecho con la apariencia "Etiquetada" del control deslizante en Animate o Manipulate. En cambio, deseo ticks con múltiples de pi debajo del control deslizante.
Animate[Plot[Sin[x + phi], {x, 0, 2 Pi}], {phi, 0, 2 Pi,
Appearance -> "Labeled"}]
¿Cuál sería la mejor forma de hacerlo? Idealmente, debería verse así:
No creo que la solución dada en https://mathematica.stackexchange.com/a/8264es práctico o incluso elegante. Siguiendo esta lógica de añadir un eje adicional no puedo hacer que se vea como quiero y, en general, parece muy "artificial".
Respuestas
1. Puede utilizarlo HorizontalGaugecomo control en 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] &}]

Para permitir solo valores discretos, digamos múltiplos de Pi/4
, para la variable de control 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. Alternativamente, puede usar un control personalizado de pobre que combina un control deslizante y un gráfico vacío con eje 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. También podemos modificar la función ValueThumbSlider
de tutorial / AdvancedManipulateFunctionality >> CustomControl Appearances para obtener un control deslizante personalizado con eje:
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[##] &}]
