Мы используем matplotlib в нашем приложении для просмотра событий для отображения наборов данных.Я запускаю следующий код без проблем с версиями matplotlib <2.1, как показано в этом примере <a href="https://i.stack.imgur.com/qyK9X.png" rel="nofollow noreferrer"> plot .Мы заранее создаем объекты сюжета, а потом заполняем данными.Это значительно быстрее, чем очистка и повторное создание коллекций снова и снова.Мы должны придерживаться этого, если мы хотим сохранить разумное время реакции.
import numpy as np
from matplotlib import pyplot
fig = pyplot.figure()
ax = fig.add_axes((0.1, 0.1, 0.8, 0.8),autoscale_on=False)
#Empty data plot
points = ax.scatter([],[], color='r', zorder=2)
#ax properties
ax.set_xlim(-10, 10)
ax.set_ylim(5e-2, 5e3)
ax.set_yscale("log")
#Example data points
x_data = [-5, -3, 0, 3, 5]
y_data = [1, 10, 1000, 10, 1]
#Set data points
points.set_offsets(np.dstack((x_data, y_data)))
pyplot.show()
Однако, с версией matplotlib выше 2.1, она сломана, и я не могу найти причину.
Я получаю следующее сообщение об ошибке:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
return self.func(*args)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 590, in callit
func(*args)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 323, in idle_draw
self.draw()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 304, in draw
FigureCanvasAgg.draw(self)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 430, in draw
self.figure.draw(self.renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", line 1295, in draw
renderer, self, artists, self.suppressComposite)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 2399, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 845, in draw
Collection.draw(self, renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 256, in draw
transform, transOffset, offsets, paths = self._prepare_points()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 237, in _prepare_points
offsets = transOffset.transform_non_affine(offsets)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/transforms.py", line 2457, in transform_non_affine
return self._a.transform_non_affine(points)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/transforms.py", line 2244, in transform_non_affine
y_points = y_points.reshape((len(y_points), 1))
ValueError: cannot reshape array of size 2 into shape (1,1)
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
return self.func(*args)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 233, in resize
self.show()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 304, in draw
FigureCanvasAgg.draw(self)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 430, in draw
self.figure.draw(self.renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", line 1295, in draw
renderer, self, artists, self.suppressComposite)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 2399, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 845, in draw
Collection.draw(self, renderer)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 256, in draw
transform, transOffset, offsets, paths = self._prepare_points()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/collections.py", line 237, in _prepare_points
offsets = transOffset.transform_non_affine(offsets)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/transforms.py", line 2457, in transform_non_affine
return self._a.transform_non_affine(points)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/transforms.py", line 2244, in transform_non_affine
y_points = y_points.reshape((len(y_points), 1))
ValueError: cannot reshape array of size 2 into shape (1,1)
Я считаю, что API некоторых функций изменился и теперь мешает построению графиков.