1

I am currently trying to work on a program that will allow the user to display their dataset in the form of a colormap and through the use of sliders, it will also allow the user to adjust the threshold of the colormap and thus update the colormap accordingly. The best to describe this would be through the use of a picture: enter image description here

This image shows how the colorbar should look before (the image on the left) and after (the image on the right) the adjustment. As the threshold values of the colrobar are changed, the colormap would be updated accordingly.

Now I am mainly using matplotlib and I found that matplotlib does support some widgets, such as a slider. However the area I need help in is devising a piece of code which will update the colorbar and colormap (like the way shown in the picture above) when the slider is adjusted. I was wondering if anyone has done this before and might have a piece of code they would be willing to share and might have pointers as to how this can be achieved.

2
  • Do you have any (partially) working code? Have you looked at the slider demo? Commented Apr 7, 2013 at 4:40
  • Did you get this sorted out? Commented Jun 1, 2013 at 3:59

1 Answer 1

1

This should get you 80% of the way there:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

ax = plt.subplot(111)
plt.subplots_adjust(left=0.25, bottom=0.25)
img_data = np.random.rand(50,50)
c_min = 0
c_max = 1

img = ax.imshow(img_data, interpolation='nearest')
cb = plt.colorbar(img)
axcolor = 'lightgoldenrodyellow'


ax_cmin = plt.axes([0.25, 0.1, 0.65, 0.03])
ax_cmax  = plt.axes([0.25, 0.15, 0.65, 0.03])

s_cmin = Slider(ax_cmin, 'min', 0, 1, valinit=c_min)
s_cmax = Slider(ax_cmax, 'max', 0, 1, valinit=c_max)

def update(val, s=None):
    _cmin = s_cmin.val
    _cmax = s_cmax.val
    img.set_clim([_cmin, _cmax])
    plt.draw()

s_cmin.on_changed(update)
s_cmax.on_changed(update)

resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
def reset(event):
    s_cmin.reset()
    s_cmax.reset()
button.on_clicked(reset)

plt.show()

This is a minimally edited version of the official demo.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.