ใครช่วยอธิบายให้ฉันฟังได้ว่าใช้%matplotlib inline
อะไรกันแน่
ใครช่วยอธิบายให้ฉันฟังได้ว่าใช้%matplotlib inline
อะไรกันแน่
คำตอบ:
%matplotlib
เป็นฟังก์ชั่นเวทย์มนตร์ใน IPython ฉันจะอ้างเอกสารที่เกี่ยวข้องที่นี่เพื่อให้คุณอ่านเพื่อความสะดวก:
IPython มีชุด 'ฟังก์ชั่นเวทย์มนตร์' ที่กำหนดไว้ล่วงหน้าที่คุณสามารถโทรด้วยไวยากรณ์สไตล์บรรทัดคำสั่ง มีเวทมนต์สองชนิดคือแบบเส้นและแบบเซลล์ Line magics ถูกนำหน้าด้วยอักขระ%% และทำงานเหมือนกับการเรียกใช้บรรทัดคำสั่งของ OS: พวกมันจะเป็นอาร์กิวเมนต์สำหรับส่วนที่เหลือของบรรทัดโดยที่อาร์กิวเมนต์ถูกส่งผ่านโดยไม่มีวงเล็บหรือเครื่องหมายคำพูด เส้นเวทมนตร์สามารถส่งคืนผลลัพธ์และสามารถใช้ในด้านขวามือของการมอบหมาย เซลล์เวทมนต์นำหน้าด้วย %% สองเท่าและเป็นฟังก์ชันที่รับเป็นอาร์กิวเมนต์ไม่เพียง แต่ส่วนที่เหลือของบรรทัด แต่ยังรวมถึงบรรทัดด้านล่างด้วยอาร์กิวเมนต์แยกต่างหาก
%matplotlib inline
ตั้งแบ็กเอนด์ของ matplotlib เป็นแบ็กเอนด์ 'inline' :
ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก
เมื่อใช้แบ็กเอนด์ 'อินไลน์' กราฟ matplotlib ของคุณจะรวมอยู่ในสมุดบันทึกของคุณถัดจากรหัส มันอาจจะคุ้มค่าที่จะอ่านวิธีที่จะทำให้พล็อตโน๊ตบุ๊ค matlab IPplpllib แบบอินไลน์สำหรับการอ้างอิงถึงวิธีใช้ในโค้ดของคุณ
หากคุณต้องการการติดต่อสื่อสารเช่นกันคุณสามารถใช้แบ็กเอนด์ nbaggด้วย%matplotlib notebook
(ใน IPython 3.x) ตามที่อธิบายไว้ที่นี่
ระบุว่าคุณกำลังใช้ IPython %matplotlib inline
จะทำให้พล็อตเอาท์พุตปรากฏขึ้นและถูกเก็บไว้ในโน้ตบุ๊ก
ตามเอกสารประกอบ
การตั้งค่านี้ก่อนที่พล็อตใด ๆ หรือการนำเข้าจะดำเนินการที่คุณจะต้องดำเนินการ
matplotlib
%matplotlib magic command
สิ่งนี้ดำเนินการตั้งค่าเบื้องหลังที่จำเป็นสำหรับ IPython ในการทำงานอย่างถูกต้องจับมือกับmatplotlib
; อย่างไรก็ตามมันไม่ได้รันคำสั่งการนำเข้า Python ใด ๆ จริง ๆ แล้วนั่นคือไม่มีการเพิ่มชื่อในเนมสเปซแบ็กเอนด์ที่น่าสนใจเป็นพิเศษซึ่งจัดทำโดย IPython นั้นเป็น
inline
แบ็กเอนด์ สิ่งนี้มีเฉพาะสำหรับโน้ตบุ๊ค Jupyter และ Jupyter QtConsole สามารถเรียกใช้ได้ดังนี้:%matplotlib inline
ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก
หากคุณต้องการเพิ่มพล็อตลงในสมุดบันทึก Jupyter ของคุณแสดงว่า%matplotlib inline
เป็นโซลูชันมาตรฐาน และยังมีคำสั่งเวทมนต์อื่น ๆ ที่จะใช้matplotlib
โต้ตอบภายใน Jupyter
%matplotlib
: plt
คำสั่ง plot ใด ๆจะทำให้หน้าต่างรูปเปิดและสามารถเรียกใช้คำสั่งเพิ่มเติมเพื่ออัพเดตพล็อตได้ การเปลี่ยนแปลงบางอย่างจะไม่ดึงขึ้นมาโดยอัตโนมัติเพื่อบังคับให้มีการอัพเดทใช้งานplt.draw()
%matplotlib notebook
: จะนำไปสู่การแปลงแบบอินเทอร์แอคทีฟที่ฝังอยู่ภายในโน้ตบุ๊กคุณสามารถซูมและปรับขนาดรูปได้
%matplotlib inline
: วาดเฉพาะภาพนิ่งในโน้ตบุ๊ค
เริ่มต้นด้วย IPython 5.0 และ matplotlib 2.0 คุณสามารถหลีกเลี่ยงการใช้เวทย์มนตร์เฉพาะของ IPython และการใช้งาน
matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()
ที่มีข้อดีของการทำงานนอก IPython เช่นกัน
inline
แปลงจะถูกสร้างขึ้นในหน้าต่างด้านนอกและคุณต้องใช้จอแสดงผล () เพื่อแสดงในโน้ตบุ๊ก
หากคุณไม่ทราบว่าแบ็กเอนด์คืออะไรคุณสามารถอ่านได้ที่: https://matplotlib.org/tutorials/introductory/usage.html#backends
บางคนใช้ matplotlib แบบโต้ตอบจากเปลือกงูหลามและมีการวางแผนหน้าต่างปรากฏขึ้นเมื่อพวกเขาพิมพ์คำสั่ง บางคนใช้โน้ตบุ๊ค Jupyter และวาดแบบอินไลน์สำหรับการวิเคราะห์ข้อมูลอย่างรวดเร็ว คนอื่นฝัง matplotlib ไว้ในส่วนต่อประสานผู้ใช้แบบกราฟิกเช่น wxpython หรือ pygtk เพื่อสร้างแอปพลิเคชั่นที่หลากหลาย บางคนใช้ matplotlib ในแบทช์สคริปต์เพื่อสร้างอิมเมจแบบโพสต์จากการจำลองเชิงตัวเลขและบางคนก็ยังเรียกใช้เว็บแอปพลิเคชันเซิร์ฟเวอร์เพื่อแสดงกราฟแบบไดนามิก เพื่อรองรับกรณีการใช้งานทั้งหมดเหล่านี้ matplotlib สามารถกำหนดเป้าหมายเอาต์พุตที่ต่างกันและความสามารถแต่ละอย่างเหล่านี้เรียกว่าแบ็กเอนด์ "ส่วนหน้า" เป็นรหัสที่ผู้ใช้หันหน้าไปทางกล่าวคือรหัสการพล็อตในขณะที่ "แบ็กเอนด์" นั้นทำงานอย่างหนักเบื้องหลังเพื่อให้ได้ร่าง
ดังนั้นเมื่อคุณพิมพ์% matplotlib inline มันจะเปิดใช้งานแบ็กเอนด์แบบอินไลน์ ตามที่กล่าวไว้ในกระทู้ก่อนหน้า:
ด้วยส่วนแบ็คเอนด์นี้เอาต์พุตของคำสั่งการลงจุดจะแสดงแบบอินไลน์ภายในส่วนหน้าเช่นสมุดบันทึก Jupyter ซึ่งอยู่ใต้เซลล์โค้ดที่สร้างขึ้นโดยตรง แปลงผลลัพธ์จะถูกเก็บไว้ในเอกสารสมุดบันทึก
มันหมายความว่ากราฟใด ๆ ที่เรากำลังสร้างเป็นส่วนหนึ่งของรหัสของเราจะปรากฏในสมุดบันทึกเดียวกันและไม่อยู่ในหน้าต่างแยกต่างหากซึ่งจะเกิดขึ้นหากเราไม่ได้ใช้ข้อความเวทมนต์นี้
หากต้องการอธิบายให้ชัดเจน:
หากคุณไม่ชอบแบบนี้:
เพิ่ม %matplotlib inline
และที่นั่นคุณมีไว้ในสมุดบันทึก jupyter ของคุณ
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
คุณสามารถหลีกเลี่ยงการใช้เวทมนตร์และการใช้งานเฉพาะของ IPythonmatplotlib.pyplot.ion()
/matplotlib.pyplot.ioff()
ซึ่งมีข้อดีของการทำงานนอก IPython เช่นกัน
หากคุณใช้ Jupyter Notebook คำสั่งอินไลน์ matplotlib จะทำให้พล็อตเอาท์พุตของคุณปรากฏในสมุดบันทึกและสามารถเก็บไว้ได้
มันไม่ได้บังคับให้เขียน มันทำงานได้ดีสำหรับฉันโดยไม่มี ( %matplotlib
) ฟังก์ชั่นเวทย์มนตร์ ฉันใช้คอมไพเลอร์ของ Sypder อันที่มาพร้อมกับอนาคอนด้า