بيثون Matplotlib توقف عندما طلب منه رسم المخطط الثاني (بعد إغلاق نافذة الرسم البياني الأول)

StackOverflow https://stackoverflow.com/questions/1219394

  •  10-07-2019
  •  | 
  •  

سؤال

وسلوك غريب، وأنا متأكد انها لي الشد، ولكن أود أن نصل إلى حقيقة ما يحدث:

وأنا على تشغيل التعليمات البرمجية التالية إلى إنشاء إطار بياني بسيط جدا باستخدام matplotlib:

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x0290B750>]
>>> plt.show()

وكما هو متوقع أحصل على الرسم البياني للمرء أن يتوقع، في إطار الجديدة التي برزت، تحتوي على الخط الأزرق بسيط جدا الذهاب 1-3 إلى 1 مرة أخرى على محور ذ، ب 0، 1، 2 ك نقطة المحور س (فقط كمثال). الآن أنا إغلاق نافذة الرسم البياني (باستخدام زر الصليب في أعلى اليمين تحت ويندوز). هذا يعطيني التحكم إلى مترجم، وأبدأ من جديد، وخلق الكائنات الجديدة:

>>>
>>> fig1 = plt.figure()
>>> bx = fig1.add_subplot(111)
>>> bx.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x029E8210>]
>>> plt.show()

وهذه المرة على الرغم من أنني أحصل على إطار النافذة، مع أي شيء في ذلك (فقط الإطار، لا خلفية شيئا الأبيض)، وكلها توقف دوي تبادل لاطلاق النار. لا بد لي من "انهاء المهمة"، يتم إنهاء مترجم الثعبان من قبل النظام وأحصل على موجه الأوامر إلى الوراء. سلوك مماثل على لجنة الهدنة العسكرية (باستثناء أنها لا فعلا رسم بياني أولا، قبل شنقا أيضا).

وهكذا بطريقة أو بأخرى بيثون و / أو matplotlib لا يريد لي لإغلاق إطار يدويا. أحد يعرف ماذا يجري وماذا يجب أن تفعل؟ ما أود القيام به هو لعب مع حولها المؤامرات المختلفة من داخل المترجم، والواضح أن هذا السلوك لا يساعد. أعرف أنني يمكن استخدام "Ipython -pylab" ولكن لمصلحة من التعلم، أريد أن أفهم خطأ أعلاه.

وشكرا.

هل كانت مفيدة؟

المحلول

وعلى ما يبدو، وهذا سببه خلل في الخلفية tkinter. انظر على سبيل المثال، https://bugs.launchpad.net/ubuntu/ + المصدر / matplotlib / + علة / 313834 . يجري العمل على ... إذا كنت تستطيع التراجع إلى مكتبة tkinter أقدم قليلا، وينبغي أن يكون حلا للمرة الرفاه (جريت إلى هذا الشيء نفسه قبل أسبوعين، وكان أملي الوحيد).

نصائح أخرى

وثلاثة أشهر في وقت متأخر إلى الحزب، ولكنني وجدت اقتراح في وثائق matlibplot استخدام التعادل () بدلا من عرض ()؛ السابق على ما يبدو فقط لا لتجعل من هذه المؤامرة الحالية، في حين يبدأ هذا الأخير حتى كل الأدوات التفاعلية، وهو حيث يبدو أن المشاكل تبدأ.

وانها ليست رهيبة في مكان بارز في وثائق، ولكن هنا على الرابط: http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show

لما يستحق، لقد حاولت pylab.show ()، وكان بالضبط نفس القضية فعلتم، في حين يبدو pylab.draw () للعمل بشكل جيد إذا أريد فقط أن يظهر الإخراج.

هل حاولت استخدام ipython بدلا من مترجم الثعبان القياسية؟

ويمكنك تثبيت ipython مع الأمر التالي:

easy_install ipython

وبعد ذلك، ipython لديه واسطة محددة لأن يتعارض مع pylab، ودعا -pylab:

ipython -pylab

In[1]: ...

وأعتقد أن معظم الناس استخدام هذا الحل لرسم الرسوم البيانية مع الثعبان، بل هو سطر الأوامر مشابه لأحد R / ماتلاب، completition، الخ ... ويدير موضوع فصل لكل مؤامرة لذلك لا ينبغي أن يكون مشكلة لديك وصفه.

هل حاولت:

plt.close()

للتأكد من إغلاق الكائن المؤامرة؟

وكما نشر في مكان ما فوق:

استخدم plt.draw() لجميع المؤامرات ما عدا آخر واحد.

لمؤامرة مشاركة الخاص بك، واستخدام plt.show()

وانها غريبة، ولكن إذا كنت لا تستخدم plt.show() في الماضي واحدة ومحاولة plt.draw() بدلا من ذلك، كنت لا أرى أي مؤامرات.

وحظا سعيدا مع هذا!

وكان لي هذه المشكلة عند استخدام TkAgg بوصفها الخلفية. بعد استخدام plt.close('all') جمدت جهاز الكمبيوتر الخاص بي.

وكان الحل للتبديل إلى الواجهة الخلفية مختلفة. أنا الآن استخدام Qt4Agg بدلا من ذلك.

إذا كان لديك Qt4Agg تثبيت أنه من الممكن للتبديل الخلفيات بكتابة:

plt.switch_backend('Qt4Agg')

وقبل بالتآمر البيانات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top