วัตถุประสงค์ของ“% matplotlib inline”


482

ใครช่วยอธิบายให้ฉันฟังได้ว่าใช้%matplotlib inlineอะไรกันแน่


22
มันเป็นฟังก์ชั่นเวทย์มนตร์ที่แสดงรูปในสมุดบันทึก (แทนที่จะแสดงดัมพ์ของวัตถุรูป) ง่ายกวดวิชา Matplotlib จะพบได้ที่นี่data-blogger.com/2017/11/15/...
www.data-blogger.com

6
คุณสามารถตรวจสอบแบ็กเอนด์ที่มีอยู่ (ชอบinline) %matplotlib --listโดยการป้อน:
Luis

คำตอบ:


285

%matplotlibเป็นฟังก์ชั่นเวทย์มนตร์ใน IPython ฉันจะอ้างเอกสารที่เกี่ยวข้องที่นี่เพื่อให้คุณอ่านเพื่อความสะดวก:

IPython มีชุด 'ฟังก์ชั่นเวทย์มนตร์' ที่กำหนดไว้ล่วงหน้าที่คุณสามารถโทรด้วยไวยากรณ์สไตล์บรรทัดคำสั่ง มีเวทมนต์สองชนิดคือแบบเส้นและแบบเซลล์ Line magics ถูกนำหน้าด้วยอักขระ%% และทำงานเหมือนกับการเรียกใช้บรรทัดคำสั่งของ OS: พวกมันจะเป็นอาร์กิวเมนต์สำหรับส่วนที่เหลือของบรรทัดโดยที่อาร์กิวเมนต์ถูกส่งผ่านโดยไม่มีวงเล็บหรือเครื่องหมายคำพูด เส้นเวทมนตร์สามารถส่งคืนผลลัพธ์และสามารถใช้ในด้านขวามือของการมอบหมาย เซลล์เวทมนต์นำหน้าด้วย %% สองเท่าและเป็นฟังก์ชันที่รับเป็นอาร์กิวเมนต์ไม่เพียง แต่ส่วนที่เหลือของบรรทัด แต่ยังรวมถึงบรรทัดด้านล่างด้วยอาร์กิวเมนต์แยกต่างหาก

%matplotlib inline ตั้งแบ็กเอนด์ของ matplotlib เป็นแบ็กเอนด์ 'inline' :

ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก

เมื่อใช้แบ็กเอนด์ 'อินไลน์' กราฟ matplotlib ของคุณจะรวมอยู่ในสมุดบันทึกของคุณถัดจากรหัส มันอาจจะคุ้มค่าที่จะอ่านวิธีที่จะทำให้พล็อตโน๊ตบุ๊ค matlab IPplpllib แบบอินไลน์สำหรับการอ้างอิงถึงวิธีใช้ในโค้ดของคุณ

หากคุณต้องการการติดต่อสื่อสารเช่นกันคุณสามารถใช้แบ็กเอนด์ nbaggด้วย%matplotlib notebook(ใน IPython 3.x) ตามที่อธิบายไว้ที่นี่


4
% matplotlib inline ^ SyntaxError: ไวยากรณ์ที่ไม่ถูกต้อง

4
@Jadda คุณใช้ IPython หรือไม่ หากไม่มีคุณจะได้รับข้อผิดพลาดทางไวยากรณ์เนื่องจากมันไม่ถูกต้อง CPython (ล่าม 'มาตรฐาน' สำหรับ Python) มีจุดเล็กน้อยที่ใช้อยู่แล้วเว้นแต่ว่าคุณกำลังใช้โน๊ตบุ๊ก IPython เนื่องจากจุดทั้งหมดคือการแสดงพล็อตแบบอินไลน์ด้วยโน้ตบุ๊ก
Aurora0001

ใช่. ฉันใช้สิ่งนี้ใน Spyder IDE (ส่วนหนึ่งของ Anaconda) เพื่อใช้ API การตรวจจับวัตถุ

3
ในกรณีนี้ @Jadda ดูเหมือนว่าคุณมีคำถามใหม่ที่จะถาม คุณควรรวมรายละเอียดที่เกี่ยวข้องทั้งหมดไว้ในนั้นเพื่อให้คุณได้รับความสนใจมากกว่าคำถามของคุณมากกว่าความคิดเห็นของคำตอบนี้ โชคดี.
Aurora0001

2
ตกลง แต่อะไรคือทางเลือก: ฉันจะเห็นแผนการได้อย่างไรหากไม่มีการใช้เวทย์มนตร์ดังกล่าว?
JaakL

77

ระบุว่าคุณกำลังใช้ IPython %matplotlib inlineจะทำให้พล็อตเอาท์พุตปรากฏขึ้นและถูกเก็บไว้ในโน้ตบุ๊ก

ตามเอกสารประกอบ

การตั้งค่านี้ก่อนที่พล็อตใด ๆ หรือการนำเข้าจะดำเนินการที่คุณจะต้องดำเนินการmatplotlib %matplotlib magic commandสิ่งนี้ดำเนินการตั้งค่าเบื้องหลังที่จำเป็นสำหรับ IPython ในการทำงานอย่างถูกต้องจับมือกับmatplotlib; อย่างไรก็ตามมันไม่ได้รันคำสั่งการนำเข้า Python ใด ๆ จริง ๆ แล้วนั่นคือไม่มีการเพิ่มชื่อในเนมสเปซ

แบ็กเอนด์ที่น่าสนใจเป็นพิเศษซึ่งจัดทำโดย IPython นั้นเป็น inlineแบ็กเอนด์ สิ่งนี้มีเฉพาะสำหรับโน้ตบุ๊ค Jupyter และ Jupyter QtConsole สามารถเรียกใช้ได้ดังนี้:

%matplotlib inline

ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก


32

หากคุณต้องการเพิ่มพล็อตลงในสมุดบันทึก Jupyter ของคุณแสดงว่า%matplotlib inlineเป็นโซลูชันมาตรฐาน และยังมีคำสั่งเวทมนต์อื่น ๆ ที่จะใช้matplotlibโต้ตอบภายใน Jupyter

%matplotlib: pltคำสั่ง plot ใด ๆจะทำให้หน้าต่างรูปเปิดและสามารถเรียกใช้คำสั่งเพิ่มเติมเพื่ออัพเดตพล็อตได้ การเปลี่ยนแปลงบางอย่างจะไม่ดึงขึ้นมาโดยอัตโนมัติเพื่อบังคับให้มีการอัพเดทใช้งานplt.draw()

%matplotlib notebook: จะนำไปสู่การแปลงแบบอินเทอร์แอคทีฟที่ฝังอยู่ภายในโน้ตบุ๊กคุณสามารถซูมและปรับขนาดรูปได้

%matplotlib inline: วาดเฉพาะภาพนิ่งในโน้ตบุ๊ค


7

เริ่มต้นด้วย IPython 5.0 และ matplotlib 2.0 คุณสามารถหลีกเลี่ยงการใช้เวทย์มนตร์เฉพาะของ IPython และการใช้งาน matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()ที่มีข้อดีของการทำงานนอก IPython เช่นกัน

ipython docs


ฉันคิดว่านี่ต่างจากการเปลี่ยนแบ็กเอนด์ หากไม่มีแบ็กเอนด์คือinlineแปลงจะถูกสร้างขึ้นในหน้าต่างด้านนอกและคุณต้องใช้จอแสดงผล () เพื่อแสดงในโน้ตบุ๊ก
Vincenzooo

4

หากคุณไม่ทราบว่าแบ็กเอนด์คืออะไรคุณสามารถอ่านได้ที่: https://matplotlib.org/tutorials/introductory/usage.html#backends

บางคนใช้ matplotlib แบบโต้ตอบจากเปลือกงูหลามและมีการวางแผนหน้าต่างปรากฏขึ้นเมื่อพวกเขาพิมพ์คำสั่ง บางคนใช้โน้ตบุ๊ค Jupyter และวาดแบบอินไลน์สำหรับการวิเคราะห์ข้อมูลอย่างรวดเร็ว คนอื่นฝัง matplotlib ไว้ในส่วนต่อประสานผู้ใช้แบบกราฟิกเช่น wxpython หรือ pygtk เพื่อสร้างแอปพลิเคชั่นที่หลากหลาย บางคนใช้ matplotlib ในแบทช์สคริปต์เพื่อสร้างอิมเมจแบบโพสต์จากการจำลองเชิงตัวเลขและบางคนก็ยังเรียกใช้เว็บแอปพลิเคชันเซิร์ฟเวอร์เพื่อแสดงกราฟแบบไดนามิก เพื่อรองรับกรณีการใช้งานทั้งหมดเหล่านี้ matplotlib สามารถกำหนดเป้าหมายเอาต์พุตที่ต่างกันและความสามารถแต่ละอย่างเหล่านี้เรียกว่าแบ็กเอนด์ "ส่วนหน้า" เป็นรหัสที่ผู้ใช้หันหน้าไปทางกล่าวคือรหัสการพล็อตในขณะที่ "แบ็กเอนด์" นั้นทำงานอย่างหนักเบื้องหลังเพื่อให้ได้ร่าง

ดังนั้นเมื่อคุณพิมพ์% matplotlib inline มันจะเปิดใช้งานแบ็กเอนด์แบบอินไลน์ ตามที่กล่าวไว้ในกระทู้ก่อนหน้า:

ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก


4

มันหมายความว่ากราฟใด ๆ ที่เรากำลังสร้างเป็นส่วนหนึ่งของรหัสของเราจะปรากฏในสมุดบันทึกเดียวกันและไม่อยู่ในหน้าต่างแยกต่างหากซึ่งจะเกิดขึ้นหากเราไม่ได้ใช้ข้อความเวทมนต์นี้


3

หากต้องการอธิบายให้ชัดเจน:

หากคุณไม่ชอบแบบนี้:

ป้อนคำอธิบายรูปภาพที่นี่

เพิ่ม %matplotlib inline

ป้อนคำอธิบายรูปภาพที่นี่

และที่นั่นคุณมีไว้ในสมุดบันทึก jupyter ของคุณ


2

TL; DR

%matplotlib inline - แสดงอินไลน์เอาต์พุต


เคอร์เนล IPython มีความสามารถในการแสดงแปลงโดยรันโค้ด เคอร์เนล IPython ถูกออกแบบมาเพื่อทำงานอย่างราบรื่นกับ matplotlib plotting library เพื่อจัดเตรียมการทำงานนี้

%matplotlibเป็นคำสั่งที่มายากลที่มีประสิทธิภาพที่จำเป็นในการติดตั้งที่อยู่เบื้องหลังฉากสำหรับ IPython ในการทำงานได้อย่างถูกต้องมือในมือกับmatplotlib; มันไม่ได้รันคำสั่งนำเข้า Python ใด ๆ นั่นคือไม่มีการเพิ่มชื่อในเนมสเปซ

แสดงผลในหน้าต่างแยกต่างหาก

%matplotlib

แสดงผลแบบอินไลน์

(ใช้ได้เฉพาะกับโน๊ตบุ๊ค Jupyter และ Jupyter QtConsole)

%matplotlib inline

แสดงด้วยแบ็กเอนด์แบบโต้ตอบ

(ค่าที่ถูกต้อง'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template')

%matplotlib gtk

ตัวอย่าง - GTK3Agg - Agg เรนเดอร์ไปยังผ้าใบ GTK 3.x (ต้องใช้ PyGObject และ pycairo หรือ cairocffi)

รายละเอียดเพิ่มเติมเกี่ยวกับแบ็กเอนด์แบบโต้ตอบ matplotlib: ที่นี่


เริ่มต้นด้วยIPython 5.0และmatplotlib 2.0คุณสามารถหลีกเลี่ยงการใช้เวทมนตร์และการใช้งานเฉพาะของ IPython matplotlib.pyplot.ion()/ matplotlib.pyplot.ioff() ซึ่งมีข้อดีของการทำงานนอก IPython เช่นกัน

อ้างอิง: IPython Rich Output - การวางแผนแบบโต้ตอบ


คำถาม noob จริงที่นี่ขอโทษ .... "เคอร์เนล IPython" คืออะไรและ "คำสั่งวิเศษ" คืออะไร หลามจู่ๆหล่อนก็แยกจากกันและไม่ได้เป็น pythonic? ฉันไม่เคยได้ยินแนวคิดเหล่านี้
lb_so

สำหรับโน้ตบุ๊คไพ ธ อน (ipynb) - ipython kernal หรือ jupyter kernal เป็นเวอร์ชันของไพ ธ อน (และการอ้างอิง) ที่จะใช้โดยโครงการ คุณสามารถเริ่มโน๊ตบุ๊ค jupyter แล้วเปลี่ยน kernals เพื่อเรียกใช้เซลล์ด้วยการกำหนดค่าของ python ที่แตกต่างกันและกำหนดค่าตัวแปรสภาพแวดล้อมและอีกมากมาย
Ani Menon

คำสั่ง @Ib_so Magic เป็นคุณสมบัติ ipython / jupyter อ่านเพิ่มเติมได้ที่นี่
Ani Menon

0

หากคุณใช้ Jupyter Notebook คำสั่งอินไลน์ matplotlib จะทำให้พล็อตเอาท์พุตของคุณปรากฏในสมุดบันทึกและสามารถเก็บไว้ได้


-8

มันไม่ได้บังคับให้เขียน มันทำงานได้ดีสำหรับฉันโดยไม่มี ( %matplotlib) ฟังก์ชั่นเวทย์มนตร์ ฉันใช้คอมไพเลอร์ของ Sypder อันที่มาพร้อมกับอนาคอนด้า


13
Spyder เป็น IDE ไม่ใช่คอมไพเลอร์
Matthieu Brucher

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