Matplotlib Slider: Funktionset_val funktioniert nicht nach Standardvorschriften?Python

Python-Programme
Anonymous
 Matplotlib Slider: Funktionset_val funktioniert nicht nach Standardvorschriften?

Post by Anonymous »

Ich bin ein Anfänger mit dem Slider -Tool und holte einen Code, der früher funktioniert hat, aber nicht mehr funktioniert. Ich habe hier einen ähnlichen Code gefunden, um das Slider-Tool in dieser Antwort zu testen, das ein in sich geschlossenes Beispiel bietet: < /p>

Code: Select all

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

class ChangingPlot(object):
def __init__(self):
self.inc = 0.5

self.fig, self.ax = plt.subplots()
self.sliderax = self.fig.add_axes([0.2, 0.02, 0.6, 0.03],
facecolor='yellow')

self.slider = DiscreteSlider(self.sliderax, 'Value', 0, 10,
increment=self.inc, valinit=self.inc)
self.slider.on_changed(self.update)

x = np.arange(0, 10.5, self.inc)
self.ax.plot(x, x, 'ro')
self.dot, = self.ax.plot(self.inc, self.inc, 'bo', markersize=18)

def update(self, value):
self.dot.set_data([[value],[value]])
self.fig.canvas.draw()

def show(self):
plt.show()

class DiscreteSlider(Slider):
"""A matplotlib slider widget with discrete steps."""
def __init__(self, *args, **kwargs):
"""Identical to Slider.__init__, except for the "increment" kwarg.
"increment" specifies the step size that the slider will be discritized
to."""
self.inc = kwargs.pop('increment', 0.5)
Slider.__init__(self, *args, **kwargs)
self.val = 1

def set_val(self, val):
discrete_val = int(val / self.inc) * self.inc
# We can't just call Slider.set_val(self, discrete_val), because this
# will prevent the slider from updating properly (it will get stuck at
# the first step and not "slide"). Instead, we'll keep track of the
# the continuous value as self.val and pass in the discrete value to
# everything else.
xy = self.poly.xy
xy[2] = discrete_val, 1
xy[3] = discrete_val, 0
self.poly.xy = xy
self.valtext.set_text(self.valfmt % discrete_val)
if self.drawon:
self.ax.figure.canvas.draw()
self.val = val
if not self.eventson:
return
for cid, func in self.observers.items():
func(discrete_val)

p = ChangingPlot()
p.show()
Wenn ich das auf dieser anderen Seite angegebene Beispiel in meiner Python 3.12.9/Matplotlib 3.10.1 -Umgebung kopiere, erhalte ich einen Fehler:

Zelle in [9], Zeile 47, in Discreteslider.set_val (self)

Code: Select all

     45 xy = self.poly.xy
46 print(type(self.poly.xy),len(xy),xy)
---> 47 xy[2] = discrete_val, 1
48 xy[3] = discrete_val, 0
49 self.poly.xy = xy

TypeError: 'tuple' object does not support item assignment

The print command returns :

2 (0, 0.25)

I understand that tuples cannot Modifiziert werden, aber dies sollte vorher funktionieren? Die wenigen Beispiele, die ich im Internet gefunden habe, verwenden immer noch die obige Syntax. Ich verstehe also nicht die Struktur von Self.Poly.xy und ich verstehe nicht, warum das Standardbeispiel nicht funktioniert. Daher kann ich nicht mit ihm spielen, um seine Verwendung zu verstehen ...
Danke für jede Hilfe

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post