Mit matplotlib Slider-Widget, um den Clim im Bild zu ändern

Ich habe praktisch keine Erfahrung mit Python, aber ich versuche, ein einfaches Skript zu erstellen, das ein Bild lädt und das Slider-Widget verwendet, um das Minimum und Maximum der Farbleiste anzupassen und die Bilddaten entsprechend neu zu zeichnen.

Ich versuche, diesem Beispiel zu folgen: http://matplotlib.sourceforge.net/examples/widgets/slider_demo.html . Ich habe versucht, nur den Plot-Befehl zu ändern, um zu zeigen, und die Schieberegler-Werte zu verwenden, um den Clim meines Bildes zu setzen. Allerdings bekomme ich folgende Fehlermeldung aus dem Aufruf 'im1, = ax.imshow' (auf Zeile 12 im Code unten):

'AxesImage' Objekt ist nicht lesbar

Ich verstehe nicht, was dieser Anruf macht, aber anscheinend kann er nicht mit imshow () verwendet werden. Wenn ich das Komma in diesem Anruf lösche, bekomme ich keine Fehler, aber das Bild wird nicht aktualisiert, wenn die Schieberegler geändert werden. Hat jemand eine alternative Lösung oder eine Erklärung dafür, warum das nicht funktioniert? Jede mögliche Hilfe würde geschätzt, danke.

Mein Code ist wie folgt:

from pylab import * from matplotlib.widgets import Slider, Button, RadioButtons import matplotlib.pyplot as plt import numpy as np close('all') ax = subplot(111) subplots_adjust(left=0.25, bottom=0.25) min0 = 0 max0 = 25000 im=np.loadtxt('im.txt') im1,=ax.imshow(im) colorbar() axcolor = 'lightgoldenrodyellow' axmin = axes([0.25, 0.1, 0.65, 0.03], axisbg=axcolor) axmax = axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor) smin = Slider(axmin, 'Min', 0, 30000, valinit=min0) smax = Slider(axmax, 'Max', 0, 30000, valinit=max0) def update(val): im1.set_clim=(smin.val,smax.val) draw() smin.on_changed(update) smax.on_changed(update) show() 

  • Optimierung von nicht regulierten Daten zum Bild
  • Wie man die Zeilen zuerst zeichnet und in Matplotlib dauert
  • Tensorflow: Wie man benutzerdefinierte Bilder im Tensorboard anzeigt (zB Matplotlib Plots)
  • Zeichnung in einem matplotlib-Widget in QtDesigner
  • Pandas - Streudiagramm mit unterschiedlicher Farblegende für jeden Punkt
  • Colorize Voronoi Diagramm
  • 2 Solutions collect form web for “Mit matplotlib Slider-Widget, um den Clim im Bild zu ändern”

    Meistens hatten Sie nur viele und viele Syntaxprobleme.

    Zum Beispiel haben Sie versucht, einen einzelnen Wert im1,=ax.imshow(im) ( im1,=ax.imshow(im) ), der Ihnen den TypeError gibt, den Sie in Ihrer Frage erwähnt haben (wie es sollte). Sie setzen auch eine Funktion auf einen Wert, wenn Sie es nennen im1.set_clim=(smin.val,smax.val) : ( im1.set_clim=(smin.val,smax.val) ).

    Außerdem habe ich den from pylab import * aus deinem Beispiel entfernt. Dies ist gut für interaktive Nutzung, aber bitte, bitte, bitte verwenden Sie es nicht für tatsächlichen Code. Es macht es sehr schwierig zu sagen, woher die Funktionen, von denen du anrufest, kommen (und der Pylab-Namespace ist vor allem von Design groß und sollte nur für interaktive Nutzung oder schnelle Einmal-Skripte verwendet werden.)

    Hier ist ein Arbeitsbeispiel (mit zufälligen Daten):

     import matplotlib.pyplot as plt import numpy as np from matplotlib.widgets import Slider, Button, RadioButtons fig = plt.figure() ax = fig.add_subplot(111) fig.subplots_adjust(left=0.25, bottom=0.25) min0 = 0 max0 = 25000 im = max0 * np.random.random((10,10)) im1 = ax.imshow(im) fig.colorbar(im1) axcolor = 'lightgoldenrodyellow' axmin = fig.add_axes([0.25, 0.1, 0.65, 0.03], axisbg=axcolor) axmax = fig.add_axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor) smin = Slider(axmin, 'Min', 0, 30000, valinit=min0) smax = Slider(axmax, 'Max', 0, 30000, valinit=max0) def update(val): im1.set_clim([smin.val,smax.val]) fig.canvas.draw() smin.on_changed(update) smax.on_changed(update) plt.show() 

    Nach der Dokumentation gibt imshow ein Objekt "matplotlib.image.AxesImage" zurück. Wenn du in dieses Komma eingehst, geht Python davon aus, dass der Rückgabetyp der Funktion etwas iterable sein wird (normalerweise ein Tupel, wenn du diese Konstruktion verwenden würdest, aber nicht unbedingt), denn Python lässt dich so schreiben wie folgt:

     a = my_function() # a = (c, d) a, b = my_function() # a = c, b = d 

    aber

     a, = my_function() # you should get an error 

    Ich bin mir nicht ganz sicher, was Python im1 ohne zu überprüfen (aber aus deiner Frage bekomme ich den Eindruck, dass das Schreiben im1,=... funktioniert, während im1=... nicht), aber ich vermute, dass du es im1=... Zeichne das Bild aus irgendeinem Grund. Wird das update eigentlich angerufen? Wenn es tut, vielleicht versuchen Sie im1.draw() stattdessen.

    Python ist die beste Programmiersprache der Welt.