“ UserWarning: Matplotlib กำลังใช้ agg ซึ่งเป็นแบ็กเอนด์ที่ไม่ใช่ GUI ดังนั้นจึงไม่สามารถแสดงตัวเลขได้” เมื่อวางแผนรูปด้วย pyplot บน Pycharm


155

ฉันกำลังพยายามพล็อตกราฟง่ายๆโดยใช้ pyplot เช่น:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[5,7,4])
plt.show()

แต่รูปไม่ปรากฏขึ้นและฉันได้รับข้อความต่อไปนี้:

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

ฉันเห็นในหลายที่ที่ต้องเปลี่ยนการกำหนดค่าของ matplotlib โดยใช้สิ่งต่อไปนี้:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

ฉันทำสิ่งนี้แล้ว แต่ก็ได้รับข้อความแสดงข้อผิดพลาดเนื่องจากไม่พบโมดูล:

ModuleNotFoundError: No module named 'tkinter'

จากนั้นฉันพยายามติดตั้ง "tkinter" โดยใช้pip install tkinter(ภายในสภาพแวดล้อมเสมือน) แต่ไม่พบ:

Collecting tkinter
  Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter

ฉันควรพูดถึงว่าฉันใช้งานทั้งหมดนี้บน Pycharm Community Edition IDE โดยใช้สภาพแวดล้อมเสมือนจริงและระบบปฏิบัติการของฉันคือ Linux / Ubuntu 18.04

ฉันต้องการทราบว่าฉันจะแก้ปัญหานี้ได้อย่างไรเพื่อให้สามารถแสดงกราฟได้


7
ลืมเรื่องกราฟไปชั่วขณะ ปัญหาของคุณคือการติดตั้ง tkinter คุณได้ลองใช้วิธีแก้ไขปัญหาใด ๆ เช่นstackoverflow.com/questions/4783810/install-tkinter-for-pythonหรือไม่
ImportanceOfBeingErnest

4
คุณใช้ tkinter เพื่ออะไรจริงๆหรือคุณแค่เลือกเป็นแบ็กเอนด์ plt?
จีเดอร์สัน

1
@ImportanceOfBeingErnest: ขอบคุณสำหรับคำใบ้ ฉันจะมุ่งเน้นไปที่การติดตั้ง tkinter ก่อน ฉันจะดูลิงค์ที่คุณให้มาและดูว่าฉันสามารถทำอะไรได้บ้าง
johnwolf1987

1
@ G Anderson: ฉันไม่รู้ว่า tkinter คืออะไรก่อนที่ฉันจะพบข้อผิดพลาดนี้กับ matplotlib ตอนนี้ฉันกำลังพยายามติดตั้งเพื่อให้สามารถแสดงกราฟได้ (ใช่ฉันเดาว่าฉันเพิ่งเลือกเป็นแบ็กเอนด์ plt) หากคุณรู้วิธีอื่น (เช่นโดยไม่ใช้ tkinter) ฉันยินดีที่จะได้ยิน
johnwolf1987

2
@ G Anderson: ฉันเรียกใช้สคริปต์เพื่อวนรอบแบ็กเอนด์ต่างๆ ปรากฎว่ามีเพียง TkAgg เท่านั้น! อันที่จริงฉันเพิ่งติดตั้งก่อนที่จะทดสอบสคริปต์
johnwolf1987

คำตอบ:


217

ฉันพบวิธีแก้ปัญหาของฉัน (ขอบคุณความช่วยเหลือของImportanceOfBeingErnest )

สิ่งที่ฉันต้องทำคือติดตั้งtkinterผ่าน Linux bash terminal โดยใช้คำสั่งต่อไปนี้:

sudo apt-get install python3-tk

แทนที่จะติดตั้งด้วยpipหรือโดยตรงในสภาพแวดล้อมเสมือนใน Pycharm


7
จริงๆแล้วฉันก็ตระหนักด้วยว่าตั้งแต่ฉันติดตั้ง tkinter ฉันไม่จำเป็นต้องเพิ่มสองบรรทัดแรกของโค้ดของฉันอีกต่อไป ( import matplotlibและmatplotlib.use('TkAgg'))
johnwolf1987

เพื่อความสมบูรณ์ภายใต้ OpenSuse Leap python3-matplotlib-tkแพคเกจที่ฉันมีการติดตั้งจะเรียกว่า
Eldrad

6
คำตอบนี้อาจกล่าวได้ว่าtkinterเป็นเวอร์ชันเฉพาะของ python ในแง่ที่คำสั่งเฉพาะนี้จะติดตั้งtkinterเฉพาะสำหรับ python เวอร์ชันเริ่มต้นของคุณ สมมติว่าคุณมีการติดตั้งเวอร์ชัน python ที่แตกต่างกันสำหรับ virtual envs ต่างๆ ในกรณีนั้นคุณจะต้องติดตั้งสำหรับเวอร์ชัน python ที่ต้องการซึ่งใช้ในการทำงานนั้น ตัวอย่างเช่นในกรณีของฉัน: sudo apt-get install python3.7-tk. การไม่รู้ว่าสิ่งนี้ทำให้ฉันต้องดิ้นรนอยู่พอสมควรโดยไม่ได้รับข้อผิดพลาด 'tkinter' ของโมดูลแม้ว่าจะติดตั้งสำหรับเวอร์ชัน python ทั่วโลก
xicocaio

ฉันต้องติดตั้ง Linux Bash Terminal บนพีซีของฉันเพื่อเรียกใช้คำสั่งนี้ และมันได้ผล! ดูhowtogeek.com/249966/…
arame3333

หรือใช้sudo apt-get install python3.8-tkถ้าเวอร์ชัน python ของคุณคือ 3.8
Vicrobot

47

ในกรณีของฉันข้อความแสดงข้อผิดพลาดบ่งบอกว่าฉันกำลังทำงานในคอนโซลที่ไม่มีหัว จึงplt.show()ไม่สามารถทำงานได้ สิ่งที่ได้ผลคือการโทรplt.savefig:

import matplotlib.pyplot as plt

plt.plot([1,2,3], [5,7,4])
plt.savefig("mygraph.png")

ผมพบคำตอบในการเก็บข้อมูล GitHub


เฮ้ยมันได้ผล! ขอบคุณสำหรับคำตอบ!
Jarrett

20

หากคุณใช้ Arch Linux (การกระจายเช่นManjaroหรือAntegros) เพียงแค่พิมพ์:

sudo pacman -S tk

และทั้งหมดจะทำงานได้อย่างสมบูรณ์!


1
ขอขอบคุณ. กำลังมองหาสิ่งนั้น
logicOnAbstractions

10

ลองimport tkinterเพราะ pycharm ติดตั้ง tkinter ให้คุณแล้วฉันมองว่าติดตั้ง tkinter สำหรับ Python

คุณอาจลอง:

import tkinter
import matplotlib
matplotlib.use('TkAgg')
plt.plot([1,2,3],[5,7,4])
plt.show()

เป็นวิธีการติดตั้ง tkinter

ฉันได้ลองทำตามวิธีของคุณแล้วดูเหมือนว่าจะไม่มีข้อผิดพลาดในการทำงานที่คอมพิวเตอร์ของฉัน แต่ก็แสดงภาพได้สำเร็จ อาจเป็นเพราะ pycharm มี tkinter เป็นแพ็คเกจระบบดังนั้นคุณไม่จำเป็นต้องติดตั้ง แต่ถ้าคุณไม่พบ tkinter ข้างในคุณสามารถไปที่Tkdocsเพื่อดูวิธีการติดตั้ง tkinter ตามที่กล่าวไว้ tkinter เป็นแพ็คเกจหลักสำหรับ python


1
ขอบคุณสำหรับคำแนะนำ น่าเสียดายที่มันไม่ทำงาน ( ModuleNotFoundError: No module named 'tkinter') ฉันจะลองติดตั้ง tkinter ด้วยวิธีอื่น
johnwolf1987

7

ฉันมีปัญหานี้เช่นกันใน PyCharm ปัญหานี้เกิดจากคุณไม่มีโมดูล tkinter ในเครื่องของคุณ

ในการติดตั้งทำตามขั้นตอนด้านล่าง (เลือกระบบปฏิบัติการที่เหมาะสมของคุณ)

สำหรับผู้ใช้ ubuntu

 sudo apt-get install python-tk

หรือ

 sudo apt-get install python3-tk

สำหรับผู้ใช้ Centos

 sudo yum install python-tkinter

หรือ

 sudo yum install python3-tkinter

สำหรับ Windows ให้ใช้ pip เพื่อติดตั้ง tk

หลังจากติดตั้ง tkinter ให้รีสตาร์ท Pycharm และรันโค้ดของคุณมันจะทำงาน


6

ติดตั้งง่าย

pip3 install PyQt5==5.9.2

มันใช้ได้กับฉัน


ใช่มันได้ผล! ฉันติดตั้งภายใน env เสมือนของฉันผ่านเทอร์มินัลของ PyCharm
WH Lee

ฉันดำเนินการ "pip3 ติดตั้ง PyQt5" โดยไม่ระบุหมายเลขเวอร์ชัน
oraclesoon

2

สิ่งนี้ใช้ได้กับ R reticulate พบว่าที่นี่

1: matplotlib.use( 'tkagg' ) หรือ 2: matplotlib$use( 'tkagg' )

ตัวอย่างเช่น:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style

import matplotlib
matplotlib.use( 'tkagg' )


style.use("ggplot")
from sklearn import svm

x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]

plt.scatter(x,y)
plt.show()

1

หลังจากอัปเกรดแพ็คเกจจำนวนมาก ( Spyder3 เป็น 4 KerasและTensorflowและการอ้างอิงจำนวนมาก) วันนี้ฉันมีปัญหาเดียวกัน! ฉันคิดไม่ออกว่าเกิดอะไรขึ้น แต่สภาพแวดล้อมเสมือน (conda-based) ที่ยังคงใช้Spyder3 ไม่ได้มีปัญหา แม้ว่าการติดตั้งtkinterหรือเปลี่ยนแบ็กเอนด์via matplotlib.use('TkAgg)ดังที่แสดงไว้ด้านบนหรือโพสต์ที่ดีเกี่ยวกับ วิธีการเปลี่ยนแบ็กเอนด์อาจช่วยแก้ปัญหาได้ดี แต่ฉันไม่เห็นว่าสิ่งเหล่านี้เป็นวิธีแก้ปัญหาที่เข้มงวด สำหรับฉันการถอนการติดตั้งmatplotlibและติดตั้งใหม่เป็นเรื่องมหัศจรรย์และปัญหาได้รับการแก้ไขแล้ว

pip uninstall matplotlib

... จากนั้นติดตั้ง

pip install matplotlib

จากทั้งหมดข้างต้นนี่อาจเป็นปัญหาการจัดการแพ็คเกจและ BTW ฉันใช้ทั้งสองอย่างcondaและpipเมื่อใดก็ตามที่เป็นไปได้


1

คุณสามารถเปลี่ยน matplotlib โดยใช้แบ็กเอนด์โดยใช้คำสั่งfrom aggถึง TkinterTKAgg

matplotlib.use('TKAgg',warn=False, force=True)

สิ่งนี้มีประโยชน์มากเนื่องจากฉันไม่ต้องโหลดคอนโซล ipython แบบโต้ตอบของฉันใหม่ lol ขอบคุณ
Iulian Pinzaru


0

Linux Mint 19. ช่วยฉันด้วย:

sudo apt install tk-dev

PS คอมไพล์ล่าม python ใหม่หลังจากติดตั้งแพ็คเกจ


0

เผื่อว่าจะช่วยใครได้

เวอร์ชัน Python: 3.7.7 แพลตฟอร์ม: Ubuntu 18.04.4 LTS

สิ่งนี้มาพร้อมกับ python เริ่มต้นเวอร์ชัน 3.6.9 อย่างไรก็ตามฉันได้ติดตั้ง python เวอร์ชัน 3.7.7 ของตัวเองไว้แล้ว (ติดตั้งโดยสร้างจากแหล่งที่มา)

tkinter ไม่ทำงานแม้ว่าhelp('module')tkinter จะแสดงในรายการก็ตาม

ขั้นตอนต่อไปนี้ใช้ได้ผลสำหรับฉัน:

  1. sudo apt-get install tk-dev.

สร้าง python ใหม่: 1. ไปที่โฟลเดอร์ python ของคุณและเรียกใช้การตรวจสอบ:

cd Python-3.7.7
sudo ./configure --enable-optimizations
  1. สร้างโดยใช้คำสั่ง make: sudo make -j 8 --- ที่นี่ 8 คือจำนวนโปรเซสเซอร์ตรวจสอบของคุณโดยใช้nprocคำสั่ง
  2. การติดตั้งโดยใช้:

    sudo make altinstall
    

อย่าใช้ sudo make install มันจะเขียนทับเวอร์ชัน 3.6.9 เริ่มต้นซึ่งอาจจะยุ่งในภายหลัง

  1. ตรวจสอบ tkinter ทันที
    python3.7 -m tkinter
    

กล่องหน้าต่างจะปรากฏขึ้น tkinter ของคุณพร้อมแล้ว


0

เมื่อฉันพบข้อผิดพลาดนี้ใน Spyder ฉันเปลี่ยนจากการเรียกใช้รหัสทีละบรรทัดเป็นการเน้นบล็อกรหัสพล็อตและเรียกใช้ทั้งหมดพร้อมกัน Voila ภาพที่ปรากฏ


0

ควรเน้นความคิดเห็นโดย @xicocaio

tkinter เป็นเวอร์ชันเฉพาะของ python ในแง่ที่sudo apt-get install python3-tkจะติดตั้ง tkinter เฉพาะสำหรับ python เวอร์ชันเริ่มต้นของคุณ สมมติว่าคุณมีเวอร์ชัน python ที่แตกต่างกันภายในสภาพแวดล้อมเสมือนต่างๆคุณจะต้องติดตั้ง tkinter สำหรับเวอร์ชัน python ที่ต้องการซึ่งใช้ในสภาพแวดล้อมเสมือนนั้น ตัวอย่างเช่นsudo apt-get install python3.7-tk. การไม่ทำเช่นนี้จะยังนำไปสู่No module named ' tkinter'ข้อผิดพลาดแม้ว่าจะติดตั้งเป็นเวอร์ชัน python ทั่วโลกแล้วก็ตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.