Сбой Savefig в Jupyter Notebook: «UserWarning: эта фигура была сохранена с помощью matplotlib версии 2.0.0 и вряд ли будет работать правильно». - PullRequest
0 голосов
/ 12 апреля 2019

Я следовал этому учебному руководству по SQL для Python и T-SQL:

https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/sqldev-py3-explore-and-visualize-the-data?view=sql-server-2017

Все выполняется нормально, пока я не попытаюсь запустить следующее в Jupyter Notebook:

%matplotlib notebook
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE= 
{DB_NAME};Trusted_Connection=True;')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]")
tables = cursor.fetchall()
for i in range(0, len(tables)):
    fig = pickle.loads(tables[i][0])
    fig.savefig(str(i)+'.png')
print("The plots are saved in directory: ",os.getcwd())

Я получаю следующее предупреждение:

C:\Anaconda3\lib\site-packages\matplotlib\figure.py:1889: UserWarning: 
This figure was saved with matplotlib version 2.0.0 and is unlikely to 
function correctly.
  (version, ))

И выводится ошибка:


AttributeError                            Traceback (most recent call last)
<ipython-input-11-5ff21e932b37> in <module>()
      5 for i in range(0, len(tables)):
      6     fig = pickle.loads(tables[i][0])
----> 7     fig.savefig(str(i)+'.png')
      8 print("The plots are saved in directory: ",os.getcwd())

C:\Anaconda3\lib\site-packages\matplotlib\figure.py in savefig(self, fname, **kwargs)
   2033             self.set_frameon(frameon)
   2034 
-> 2035         self.canvas.print_figure(fname, **kwargs)
   2036 
   2037         if frameon:

C:\Anaconda3\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
   2261                 orientation=orientation,
   2262                 bbox_inches_restore=_bbox_inches_restore,
-> 2263                 **kwargs)
   2264         finally:
   2265             if bbox_inches and restore_bbox:

C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs)
    511 
    512     def print_png(self, filename_or_obj, *args, **kwargs):
--> 513         FigureCanvasAgg.draw(self)
    514         renderer = self.get_renderer()
    515         original_dpi = renderer.dpi

C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in draw(self)
    431             # if toolbar:
    432             #     toolbar.set_cursor(cursors.WAIT)
--> 433             self.figure.draw(self.renderer)
    434             # A GUI class may be need to update a window using this 
draw, so
     435             # don't forget to call the superclass.

C:\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     53                 renderer.start_filter()
     54 
---> 55             return draw(artist, renderer, *args, **kwargs)
     56         finally:
     57             if artist.get_agg_filter() is not None:

C:\Anaconda3\lib\site-packages\matplotlib\figure.py in draw(self, renderer)
   1456         try:
   1457             renderer.open_group('figure')
-> 1458             if self.get_constrained_layout() and self.axes:
   1459                 if True:
   1460                     self.execute_constrained_layout(renderer)

C:\Anaconda3\lib\site-packages\matplotlib\figure.py in 
get_constrained_layout(self)
    520         See :doc:`/tutorials/intermediate/constrainedlayout_guide`
    521         """
--> 522         return self._constrained
    523 
    524     def set_constrained_layout(self, constrained):

AttributeError: 'Figure' object has no attribute '_constrained'

В учебном пособии, которое я использую, написано "makeубедитесь, что библиотеки Python на вашем клиенте (например, matplotlib) имеют ту же или более высокую версию относительно библиотек, установленных на сервере. "Я проверил и Сервер использует Matplotlib версии 2.0.0.Поэтому я обновил версию своего клиента до 2.2.2 и повторно запустил вышеописанное, и получил ту же ошибку, включая предупреждение пользователя.

Если кто-нибудь знает, как это исправить, помогите.

РЕДАКТИРОВАТЬ: я не уверен, если это имеет значение, но я заметил, что SQL Server использует Python 3.5, в то время как я использую 3.6.3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...