รูปและแกน
ทำความเข้าใจโมเดลการวาดกราฟ
รูปและแกน เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
โมเดลการพล็อต
Matplotlib คือไลบรารีพื้นฐานสำหรับการพล็อตใน Python หากต้องการใช้งานอย่างมีประสิทธิภาพ คุณต้องเข้าใจโมเดลสองระดับของไลบรารีนี้ ได้แก่ รูปภาพและพื้นที่พล็อต
รูปภาพคือหน้าต่างหรือหน้ากระดาษโดยรวมที่ใช้วาดทุกอย่าง ส่วนพื้นที่พล็อตคือพล็อตหนึ่งรายการภายในรูปภาพนั้น โดยมีระบบพิกัด x และ y เป็นของตัวเอง
- รูปภาพหนึ่งรูปสามารถมีพื้นที่พล็อตได้หลายพื้นที่
- ข้อมูลจะอยู่ในพื้นที่พล็อตแต่ละพื้นที่
รูปภาพเทียบกับพื้นที่พล็อตเทียบกับแกน
คำศัพท์สามคำนี้สับสนกันได้ง่าย:
- รูปภาพ คือภาพทั้งหมดหรือพื้นที่บรรจุองค์ประกอบต่าง ๆ
- พื้นที่พล็อต คือบริเวณสำหรับพล็อตหนึ่งรายการ (โปรดสังเกตการสะกด คำนี้ไม่ใช่รูปพหูพจน์ของแกน)
- แกน คือเส้นตัวเลขของแกน x หรือแกน y ภายในพื้นที่พล็อต
ดังนั้น รูปภาพจึงบรรจุพื้นที่พล็อต และพื้นที่พล็อตแต่ละแห่งจะบรรจุออบเจ็กต์แกนสองชิ้น (หรือสามชิ้น)
การสร้างรูปภาพและพื้นที่พล็อต
วิธีที่แนะนำในการเริ่มต้นคือ plt.subplots() ซึ่งส่งคืนรูปภาพและพื้นที่พล็อตในการเรียกใช้ครั้งเดียว
แม้ไม่แสดงผล เราก็ยังทำความเข้าใจโมเดลนี้ได้ไม่ยาก ในที่นี้เราจะจำลองสิ่งที่ออบเจ็กต์เหล่านี้ใช้แทน
fig = {'type': 'Figure', 'axes': []}
ax = {'type': 'Axes', 'parent': 'Figure'}
fig['axes'].append(ax)
print('Figure holds', len(fig['axes']), 'axes')
print('Axes parent is the', ax['parent'])อินเทอร์เฟซไพพล็อต
Matplotlib มีรูปแบบการใช้งานสองแบบ รูปแบบไพพล็อต (อิงสถานะ) ใช้ plt.plot() และติดตามรูปภาพปัจจุบันโดยอัตโนมัติ ส่วนรูปแบบเชิงออบเจ็กต์ใช้ ax.plot() อย่างชัดเจน
สำหรับงานที่ซับซ้อนกว่าการร่างภาพอย่างรวดเร็ว ควรเลือกรูปแบบเชิงออบเจ็กต์ เพราะจะเข้าใจได้ชัดเจนกว่าเมื่อมีพื้นที่พล็อตหลายพื้นที่
เหตุใดรูปแบบเชิงออบเจ็กต์จึงดีกว่า
เมื่อคุณเรียกใช้ plt.title('X') คำสั่งนี้จะมีผลกับพื้นที่พล็อตที่เป็นปัจจุบันในขณะนั้น การทำงานนี้อาจไม่ชัดเจนเมื่อมีพล็อตย่อยหลายรายการ
แต่เมื่อใช้ ax.set_title('X') ก็ไม่ต้องคาดเดา เพราะเมธอดจะทำงานกับพื้นที่พล็อตที่คุณระบุไว้อย่างเจาะจง
ระบบพิกัด
พื้นที่พล็อตแต่ละแห่งจะแปลงค่าข้อมูลเป็นตำแหน่งแสดงผล พิกัดข้อมูลคือความหมายของตัวเลข ส่วนพื้นที่พล็อตจะปรับขนาดตัวเลขเหล่านั้นให้พอดีกับบริเวณวาดภาพ
เราสามารถจำลองการแปลงนี้ด้วยคณิตศาสตร์พื้นฐานได้
data_min, data_max = 0, 100
pixel_min, pixel_max = 0, 400
def to_pixels(value):
frac = (value - data_min) / (data_max - data_min)
return pixel_min + frac * (pixel_max - pixel_min)
for v in [0, 25, 50, 100]:
print('data', v, '->', to_pixels(v), 'px')ขนาดรูปภาพและ DPI
รูปภาพมีขนาดเป็นนิ้วและมีความละเอียดเป็นจุดต่อนิ้ว (DPI) ขนาดพิกเซลเกิดจากผลคูณของค่าทั้งสอง
ตัวอย่างเช่น รูปภาพขนาด 6x4 นิ้วที่ความละเอียด 100 DPI จะมีขนาด 600x400 พิกเซล
width_in, height_in = 6, 4
dpi = 100
print('Pixels:', width_in * dpi, 'x', height_in * dpi)การเพิ่มพื้นที่พล็อตด้วยตนเอง
นอกจาก plt.subplots() แล้ว คุณยังเพิ่มพื้นที่พล็อตในสี่เหลี่ยมผืนผ้าที่กำหนดอย่างแม่นยำได้ด้วย fig.add_axes([left, bottom, width, height]) โดยค่าแต่ละค่าคือสัดส่วนของรูปภาพระหว่าง 0 ถึง 1
วิธีนี้ใช้สร้างพล็อตแทรกและโครงร่างแบบกำหนดเอง
รูปภาพปัจจุบัน
ไพพล็อตจะเก็บทะเบียนของรูปภาพต่าง ๆ และตัวชี้ไปยังรูปภาพปัจจุบัน plt.gcf() ใช้ดึงรูปภาพปัจจุบัน ส่วน plt.gca() ใช้ดึงพื้นที่พล็อตปัจจุบัน
องค์ประกอบเหล่านี้มีไว้เพื่อรองรับรูปแบบที่อิงสถานะเป็นหลัก ส่วนโค้ดแบบเชิงออบเจ็กต์จะเก็บการอ้างอิงของคุณเองแทน
การแสดงและการปิดรูปภาพ
plt.show() จะแสดงผลรูปภาพที่เปิดอยู่ทั้งหมดในหน้าต่าง ส่วน plt.close() จะคืนหน่วยความจำของรูปภาพ ในสคริปต์ที่สร้างรูปภาพจำนวนมาก การปิดรูปภาพจะช่วยป้องกันการใช้หน่วยความจำสะสม
ในสมุดบันทึก รูปภาพจะแสดงภายในเนื้อหาโดยอัตโนมัติ
รายการตรวจสอบในใจ
ก่อนวาดสิ่งใด ให้ถามตัวเองว่า:
- ต้องใช้รูปภาพกี่รูป
- แต่ละรูปต้องมีพื้นที่พล็อตกี่แห่ง
- ข้อมูลแต่ละส่วนเป็นของพื้นที่พล็อตใด
การตอบคำถามเหล่านี้ก่อนจะทำให้การใช้ส่วนติดต่อการเขียนโปรแกรมเชิงวัตถุเป็นเรื่องเป็นธรรมชาติ
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับรูปภาพและแบบจำลองพื้นที่พล็อต
ทบทวน
คุณได้เรียนรู้แบบจำลองหลักของ Matplotlib แล้ว:
- รูปภาพ เป็นตัวบรรจุข้อมูล โดยมีขนาดวัดเป็นนิ้วคูณด้วย DPI
- พื้นที่พล็อต คือแผนภาพแต่ละรายการที่มีพิกัดของตนเอง
- แกน คือเส้นตัวเลขของแกน x หรือ y
- ควรใช้รูปแบบเชิงวัตถุด้วย
fig, ax = plt.subplots()
ด้วยแบบจำลองในใจนี้ การปรับแต่งทุกอย่างในภายหลังจะคาดเดาได้
คำถามที่พบบ่อย
บทเรียน “รูปและแกน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปและแกน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปและแกน”
ทำความเข้าใจโมเดลการวาดกราฟ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปและแกน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ