Schieberegler mit Zecken

Aug 21 2020

Ich bin mit dem "Beschrifteten" Erscheinungsbild des Schiebereglers in "Animieren" oder "Manipulieren" nicht zufrieden. Stattdessen wünsche ich Ticks mit einem Vielfachen von pi unter dem Schieberegler.

Animate[Plot[Sin[x + phi], {x, 0, 2 Pi}], {phi, 0, 2 Pi, 
Appearance -> "Labeled"}]

Was wäre der beste Weg, dies zu tun? Im Idealfall sollte es so aussehen:

Ich glaube nicht, dass die Lösung gegeben ist https://mathematica.stackexchange.com/a/8264ist praktisch oder sogar elegant. Nach dieser Logik des Hinzufügens einer zusätzlichen Achse kann ich sie nicht so aussehen lassen, wie ich es möchte, und im Allgemeinen scheint sie sehr "künstlich" zu sein.

Antworten

12 kglr Aug 21 2020 at 11:38

1. Sie können HorizontalGaugeals Steuerelement verwenden in 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] &}]

Um nur diskrete Werte Pi/4für die Steuervariable zuzulassen, sagen wir Vielfache von 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. Alternativ können Sie das benutzerdefinierte Steuerelement eines armen Mannes verwenden, das einen Schieberegler und eine leere Grafik mit einer horizontalen Achse kombiniert:

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. Sie können die Funktion auch ValueThumbSliderüber Tutorial / AdvancedManipulateFunctionality >> CustomControl Appearances ändern , um einen benutzerdefinierten Schieberegler mit Achse zu erhalten:

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[##] &}]