Slider dengan kutu
Saya tidak senang dengan tampilan slider "Berlabel" di Animate atau Manipulate. Sebagai gantinya, saya ingin mencentang dengan beberapa pi di bawah slider.
Animate[Plot[Sin[x + phi], {x, 0, 2 Pi}], {phi, 0, 2 Pi,
Appearance -> "Labeled"}]
Apa cara terbaik untuk melakukannya? Idealnya akan terlihat seperti ini:
Saya tidak berpikir solusi diberikan https://mathematica.stackexchange.com/a/8264praktis atau bahkan elegan. Mengikuti logika penambahan sumbu tambahan ini, saya tidak dapat membuatnya terlihat seperti yang saya inginkan dan, secara umum, terlihat sangat "artifisial".
Jawaban
1. Anda dapat menggunakan HorizontalGaugesebagai kontrol di 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] &}]

Untuk mengizinkan hanya nilai diskrit, katakan kelipatan dari Pi/4
, untuk variabel kontrol 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. Alternatifnya, Anda dapat menggunakan kontrol kustom orang miskin yang menggabungkan penggeser dan grafik kosong dengan sumbu 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. Kita juga dapat memodifikasi fungsi ValueThumbSlider
dari tutorial / AdvancedManipulateFunctionality >> Penampilan CustomControl untuk mendapatkan slider kustom dengan sumbu:
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[##] &}]
