Интерактивные сюжеты Matplotlib вылетают при использовании прокрутки мыши на сюжете - PullRequest
0 голосов
/ 18 октября 2018

Эта проблема, кажется, возникает всякий раз, когда я строю данные, используя plt.show () с Matplotlib на моем Macbook Pro (OSX 10.13.6).Если я создаю фрейм данных Pandas и отображаю данные с помощью Matplotlib, то показываю результат на экране в интерактивном окне (используя plt.show), окно (и matplotlib) часто вылетает.Это всегда будет происходить, если на экране сделать жест мыши для прокрутки вверх или вниз.В других случаях кажется, что это происходит случайным образом.

Когда происходит сбой графика, я получаю это как трассировку:

Traceback (most recent call last):
File "./plot_lc_vs_gnss.py", line 117, in <module>
  main()
File "./plot_lc_vs_gnss.py", line 28, in main
  plt.show()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/pyplot.py", line 253, in show
  return _show(*args, **kw)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 208, in show
  cls.mainloop()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py", line 1073, in mainloop
  Tk.mainloop()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 557, in mainloop
  _default_root.tk.mainloop(n)
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

Данные, которые я читаю, представляют собой простой CSV, который был ранее сгенерированпанды также.Я создаю сюжет с помощью простого сценария, подобного следующему:

#!/usr/local/bin/python3
import matplotlib
matplotlib.use('TkAgg') 
import json
import os
import numpy as np
import pandas as pd
import pymap3d as pm
import matplotlib.pyplot as plt

def load_csvs():
gnss = pd.read_csv('di3_d4_1017_gnss.csv')
ins = pd.read_csv('di3_d4_1017_ins.csv')

return gnss, ins

def plot_cdf(gnss, ins):

data = [gnss, ins]

    plt.figure(figsize=[12,9])
    ax = plt.subplot(1,1,1)

    for ds in data:
        if ds[err].any != np.nan:
            dsorted = np.sort(ds['horizontal_error'])
            yvals = np.arange(len(dsorted)) / float(len(dsorted) - 1) * 100
            ax.plot(dsorted, yvals)
    ax.grid()
    ax.set_xlabel('Horizontal Error (m)')
    ax.set_ylabel('Percent of Epochs')
    title = 'Drive Test data \n DI-3 (roof) d4_1017 \n CDF Horizontal Error'
    plt.title(title)
    plt.legend(['gnss', 'ins'], loc='lower right')


def main():
gnss, ins = load_csvs()

plot_cdf(gnss, ins)
plt.show()

if __name__ == "__main__":
main() 

Любой совет о том, как решить эту проблему, будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 июля 2019

Полагаю, к настоящему времени это не имеет значения, но это, кажется, нерешенная проблема, обсуждаемая в # 9637

...