vlad
vlad

Reputation: 811

How to format slider

I have a slider:

time_ax = fig.add_axes([0.1, 0.05, 0.8, 0.03])
var_time = Slider(time_ax, 'Time', 0, 100, valinit=10, valfmt='%0.0f')
var_time.on_changed(update)

and I want to customize the appearance of this slider:

screenshot

I can add axisbg parameter to add_axes function, which will change default white background to assigned color, but that's all I see possible for now.

So, how to change other slider components:

Upvotes: 1

Views: 1936

Answers (2)

Baron Grouda
Baron Grouda

Reputation: 103

The color of the box you can change when you define the axis of the "ax" box:

fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.25)
t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0*np.sin(2*np.pi*f0*t)
l, = plt.plot(t,s, lw=2, color='red')
plt.axis([0, 1, -10, 10])

axcolor = 'lightgoldenrodyellow'
axfreq = plt.axes([0.03, 0.25, 0.03, 0.65], axisbg=axcolor)
axamp = plt.axes([0.08, 0.25, 0.03, 0.65], axisbg=axcolor)
sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0)
samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)
# The vline attribute controls the initial value line
samp.vline.set_color('green')

Upvotes: 0

Ajean
Ajean

Reputation: 5659

The slider border is just the spines of the Axes instance. The progress bar can be directly accessed for basic customization in the constructor, and the initial status indicator is an attribute of the slider. I was able to change all of those things:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

fig = plt.figure()
time_ax = fig.add_axes([0.1, 0.05, 0.8, 0.03])

# Facecolor and edgecolor control the slider itself
var_time = Slider(time_ax, 'Time', 0, 100, valinit=10, valfmt='%0.0f',
                  facecolor='c', edgecolor='r')

# The vline attribute controls the initial value line
var_time.vline.set_color('blue')

# The spines of the axis control the borders
time_ax.spines['left'].set_color('magenta')
time_ax.spines['right'].set_color('magenta')
time_ax.spines['bottom'].set_color('magenta')
time_ax.spines['top'].set_color('magenta')

Upvotes: 1

Related Questions