график matplotlib не показывает метки и текст, а аргумент TypeError: float() должен быть строкой или числом, а не ‘NoneType’

#python #datetime #matplotlib

#python #datetime #matplotlib

Вопрос:

я пытаюсь показать некоторый результат в виде графиков из моей таблицы, используя matplotlib, и показать на графике текст

которые показывают x и y в каждой точке

но он продолжает показывать мне эту ошибку

 y = float(self.convert_yunits(y))
TypeError: float() argument must be a string or a number, not 'NoneType'
  

это мой код

 def total_graphs (self): #pushButton_162
        
        self.connection = psycopg2.connect(user="postgres",
                                            password="password",
                                            host="localhost",
                                            database="database")
        self.cur = self.connection.cursor()

        date_0 = str(self.dateEdit_60.text())
        date_1 = str(self.dateEdit_59.text()) 

        selected_day = self.dateEdit_60.date()
        last_day = selected_day.addDays(-1)
        last_day_str = last_day.toString(self.dateEdit_60.displayFormat())

        self.cur.execute( '''SELECT date, total_revenu, total_depance, total_différence FROM total_jr WHERE  date BETWEEN %s AND %s'''
                            ,(date_0, date_1))
        rows = self.cur.fetchall()

        date = []
        total_revenu = []

        for row in rows:
            date.append(row[0])
            total_revenu.append(row[1])


        figure,ax=plt.subplots()
         
        ax.set_xlabel("date(jour)")
        ax.set_ylabel("montant (DZD)")
        line1, = plt.plot(date, total_revenu, marker="o", label="revenu total")
        for x,y in zip(date,total_revenu):
            label = f"({x},{y})"    #"{:.2f}".format(y)

            plt.annotate(label, # this is the text
                 (x,y), # this is the point to label
                 textcoords="offset points", # how to position the text
                 xytext=(0,10), # distance from text to points (x,y)
                 ha='center') # horizontal alignment can be left, right or center
        plt.legend(handles=[line1])
        plt.show(block=False)
  

это полная ошибка

 Traceback (most recent call last):
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackendsbackend_qt5.py", line 480, in _draw_idle
    self.draw()
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackendsbackend_agg.py", line 407, in draw
    self.figure.draw(self.renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibfigure.py", line 1863, in draw
    mimage._draw_list_compositing_images(
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibimage.py", line 131, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibcbookdeprecation.py", line 411, in wrapper
    return func(*inner_args, **inner_kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibaxes_base.py", line 2748, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibimage.py", line 131, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1888, in draw
    if not self.get_visible() or not self._check_xy(renderer):
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1483, in _check_xy
    xy_pixel = self._get_position_xy(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1476, in _get_position_xy
    return self._get_xy(renderer, x, y, self.xycoords)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1346, in _get_xy
    y = float(self.convert_yunits(y))
TypeError: float() argument must be a string or a number, not 'NoneType'
Traceback (most recent call last):
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackendsbackend_qt5.py", line 480, in _draw_idle
    self.draw()
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibbackendsbackend_agg.py", line 407, in draw
    self.figure.draw(self.renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibfigure.py", line 1863, in draw
    mimage._draw_list_compositing_images(
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibimage.py", line 131, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibcbookdeprecation.py", line 411, in wrapper
    return func(*inner_args, **inner_kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibaxes_base.py", line 2748, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibimage.py", line 131, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibartist.py", line 41, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1888, in draw
    if not self.get_visible() or not self._check_xy(renderer):
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1483, in _check_xy
    xy_pixel = self._get_position_xy(renderer)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1476, in _get_position_xy
    return self._get_xy(renderer, x, y, self.xycoords)
  File "C:UserszakariaAppDataLocalProgramsPythonPython38libsite-packagesmatplotlibtext.py", line 1346, in _get_xy
    y = float(self.convert_yunits(y))
TypeError: float() argument must be a string or a number, not 'NoneType'
  

есть ли способ исправить эту ошибку

Комментарии:

1. это помогло бы увидеть полную обратную трассировку здесь

2. мне очень жаль, что я не понимаю, что именно вы имеете в виду

3. строки, которая выдает ошибку, y = float(self.convert_yunits(y)) , нет в вашем коде — пожалуйста, добавьте полную обратную трассировку ошибки, показывающую, какая строка вашего кода в конечном итоге приводит к ошибке.

4. кажется, у вас есть None элементы в вашей переменной y; total_revenu, это так? если это так, вы можете попытаться заменить их числом, чтобы узнать, в чем проблема. в качестве альтернативы я бы попытался преобразовать список в массив numpy (с np.nan вместо None) и посмотреть, работает ли это.

5. Определите стратегию, которая соответствует вашим потребностям, и поймайте / обработайте ошибку .