กราฟเส้นและกราฟกระจาย
วาดข้อมูลต่อเนื่องด้วย ax.plot() และจุดข้อมูลไม่ต่อเนื่องด้วย ax.scatter() พร้อมควบคุมสี เครื่องหมาย และรูปแบบเส้น
กราฟเส้นและกราฟกระจาย เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เส้นและจุดกระจาย: ประเภทพล็อตพื้นฐาน
พล็อตเส้น เชื่อมจุดข้อมูลตามลำดับด้วยเส้น และเหมาะสำหรับแสดงแนวโน้มตามเวลาหรือฟังก์ชันต่อเนื่อง พล็อตกระจาย แสดงจุดแต่ละจุดโดยไม่เชื่อมเส้น จึงเหมาะอย่างยิ่งสำหรับสำรวจความสัมพันธ์ระหว่างตัวแปรเชิงตัวเลขสองตัว ทั้งสองแบบสร้างบนอ็อบเจ็กต์ Axes ของ Matplotlib โดยใช้ ax.plot() สำหรับเส้น และ ax.scatter() สำหรับจุดกระจาย
ax.plot() สำหรับแผนภูมิเส้น
ax.plot(x, y) วาดเส้นเชื่อมจุดข้อมูลตามลำดับ ให้ส่งค่า x เป็นอาร์กิวเมนต์ตัวแรก และค่า y เป็นตัวที่สอง ทั้งสองค่าอาจเป็นลิสต์ Python อาร์เรย์ NumPy หรือ Series ของ Pandas ก็ได้ หากส่งอาร์กิวเมนต์เพียงตัวเดียว Matplotlib จะใช้ดัชนี (0, 1, 2, ...) เป็นแกน x โดยอัตโนมัติ เมธอดนี้คืนค่ารายการอ็อบเจ็กต์ Artist ชนิด Line2D
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y) # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()การควบคุมรูปแบบและสีของเส้น
อาร์กิวเมนต์คีย์เวิร์ดที่ใช้บ่อยของ ax.plot() ได้แก่ color (ชื่อสี รหัสฐานสิบหก หรือทูเพิล RGB), linewidth (หรือ lw), linestyle (หรือ ls): '-' เส้นทึบ, '--' เส้นประ, ':' เส้นจุด, '-.' เส้นประจุด, marker (รูปร่างที่แต่ละจุดข้อมูล) และ markersize คุณสามารถใช้ linestyle ร่วมกับ marker เพื่อแสดงทั้งเส้นและจุดข้อมูลแต่ละจุดพร้อมกัน
fig, ax = plt.subplots(figsize=(7, 4))
# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
marker='o', markersize=4, label='sin(x)')
# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')
ax.legend()
plt.close()การพล็อตเส้นหลายเส้น
เรียกใช้ ax.plot() หลายครั้งเพื่อวางเส้นหลายเส้นซ้อนกันใน Axes เดียวกัน Matplotlib จะวนใช้ชุดสีเริ่มต้นโดยอัตโนมัติ ควรส่งคีย์เวิร์ด label ให้กับเส้นแต่ละเส้นเสมอ เพื่อให้ ax.legend() ใส่ป้ายกำกับให้โดยอัตโนมัติ เรียกใช้ legend หลังคำสั่งพล็อตทั้งหมด เพื่อให้แน่ใจว่าเส้นทุกเส้นถูกรวมไว้
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))
for product in ['A', 'B', 'C']:
sales = np.random.randint(50, 200, 12)
ax.plot(dates, sales, marker='o', label=f'Product {product}')
ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()การพล็อต DataFrames ของ Pandas โดยตรง
DataFrames ของ Pandas มีเมธอด .plot() ที่สร้างแผนภูมิ Matplotlib ได้โดยตรง ส่ง ax=ax เพื่อวาดบนอ็อบเจ็กต์ Axes ที่มีอยู่ df.plot(ax=ax) จะพล็อตทุกคอลัมน์เป็นเส้นแยกกัน โดยใช้ดัชนีของ DataFrame เป็นแกน x หลังจากนั้นคุณยังใช้การปรับแต่งทั้งหมดของ Matplotlib กับอ็อบเจ็กต์ ax ได้
df = pd.DataFrame(
np.random.randn(12, 3),
index=pd.date_range('2024', periods=12, freq='ME'),
columns=['North', 'South', 'West']
).cumsum()
fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()ax.scatter() สำหรับพล็อตกระจาย
ax.scatter(x, y) วาดจุดแต่ละจุดโดยไม่เชื่อมเส้น ต่างจาก ax.plot() ตรงที่ scatter ไม่ได้สมมติว่าข้อมูลเรียงลำดับอยู่ พารามิเตอร์สำคัญ ได้แก่ c (สี ซึ่งอาจเป็นอาร์เรย์เพื่อกำหนดสีแยกแต่ละจุด), s (ขนาดจุด ซึ่งอาจเป็นอาร์เรย์ได้เช่นกัน), cmap (ตารางสีเมื่อ c เป็นค่าตัวเลข) และ alpha (ความโปร่งใสตั้งแต่ 0 ถึง 1 เพื่อจัดการจุดที่พล็อตทับกัน)
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()การกำหนดสีจุดกระจายตามหมวดหมู่
ส่งอาร์เรย์ตัวเลขไปยังพารามิเตอร์ c และส่งตารางสี cmap เพื่อกำหนดสีจุดกระจายตามตัวแปรที่สาม เพิ่มแถบสีด้วย plt.colorbar(scatter_obj) เพื่อแสดงมาตราส่วน เทคนิคนี้เรียกว่าแบบหนึ่งของ แผนภูมิฟองอากาศ เมื่อพารามิเตอร์ s (ขนาด) เปลี่ยนแปลงตามตัวแปรที่สี่ด้วย
categories = np.random.choice([0, 1, 2], size=100)
fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()การเพิ่มเส้นแนวโน้ม
พล็อตกระจายที่มีเส้นแนวโน้มที่ฟิตแล้วช่วยสื่อทั้งจุดข้อมูลแต่ละจุดและรูปแบบโดยรวม ใช้ np.polyfit(x, y, 1) เพื่อคำนวณการฟิตเชิงเส้น ประเมินค่าด้วย np.poly1d(coeffs)(x_range) แล้ววางผลลัพธ์ทับลงบนพล็อตกระจายด้วย ax.plot() เส้นแนวโน้มควรมีความบางกว่าและใช้รูปแบบต่างจากจุดข้อมูล เพื่อให้แยกออกจากกันได้ชัดเจน
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')
# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')
ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()การแรเงาช่วงความเชื่อมั่นด้วย fill_between
ax.fill_between(x, y_lower, y_upper) เติมพื้นที่ระหว่างเส้นโค้งสองเส้น โดยทั่วไปใช้แสดงช่วงความเชื่อมั่นรอบเส้นค่าเฉลี่ย แถบส่วนเบี่ยงเบนมาตรฐาน หรือช่วงค่าต่ำสุด/สูงสุด ส่ง alpha เพื่อให้การแรเงาโปร่งใสบางส่วนและยังมองเห็นข้อมูลด้านล่างได้
x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()ขอบเขตแกนและเส้นตาราง
ควบคุมช่วงที่มองเห็นได้ด้วย ax.set_xlim(min, max) และ ax.set_ylim(min, max) เปิดใช้เส้นตารางด้วย ax.grid(True) ปรับแต่งตารางด้วยอาร์กิวเมนต์คีย์เวิร์ด ได้แก่ linestyle, linewidth และ alpha ตารางแบบจางที่ใช้ alpha=0.3 ช่วยให้อ่านค่าที่แน่นอนได้ง่ายขึ้นโดยไม่ทำให้แผนภูมิรกรุงรัง เรียกใช้ ax.set_axisbelow(True) เพื่อวาดตารางไว้ด้านหลังจุดข้อมูล
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True) # grid behind data
ax.set_title('Sine with Grid')
plt.close()Alpha และจุดที่พล็อตทับกัน
เมื่อจุดข้อมูลจำนวนมากซ้อนทับกันในบริเวณเดียวของพล็อตกระจาย จุดแต่ละจุดจะมองไม่เห็น ปรากฏการณ์นี้เรียกว่า การพล็อตทับกัน วิธีแก้ที่ง่ายที่สุดคือลดความทึบด้วย alpha (0.0 = โปร่งใสทั้งหมด, 1.0 = ทึบทั้งหมด) ตั้งค่า alpha=0.3 หรือต่ำกว่า เพื่อให้บริเวณที่หนาแน่นดูเข้มขึ้น (เพราะจุดกึ่งโปร่งใสหลายจุดซ้อนกัน) ขณะที่บริเวณเบาบางยังคงดูสว่าง สำหรับชุดข้อมูลขนาดใหญ่มาก (หลายล้านจุด) ให้พิจารณาใช้ hexbin หรือการประมาณความหนาแน่นแบบเคอร์เนลแทน
np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')
# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')
plt.tight_layout()
plt.close()ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับพล็อตเส้นและพล็อตกระจายใน Matplotlib จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า ax.plot() สร้าง แผนภูมิเส้น ซึ่งควบคุมสี รูปแบบเส้น และเครื่องหมายได้อย่างเต็มที่; ax.scatter() สร้าง พล็อตกระจาย ที่กำหนดสีและขนาดแยกแต่ละจุดได้ผ่าน c และ s; ax.fill_between() เพิ่ม แถบความเชื่อมั่น; และ ax.grid() เพิ่มเส้นตารางเพื่อให้อ่านง่ายขึ้น ต่อไปเราจะสร้างแผนภูมิแท่งและฮิสโตแกรมเพื่อแสดงข้อมูลเชิงหมวดหมู่และการกระจาย
คำถามที่พบบ่อย
บทเรียน “กราฟเส้นและกราฟกระจาย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กราฟเส้นและกราฟกระจาย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กราฟเส้นและกราฟกระจาย”
วาดข้อมูลต่อเนื่องด้วย ax.plot() และจุดข้อมูลไม่ต่อเนื่องด้วย ax.scatter() พร้อมควบคุมสี เครื่องหมาย และรูปแบบเส้น คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “กราฟเส้นและกราฟกระจาย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม Figure และ Axes
- กราฟเส้นและกราฟกระจาย
- กราฟแท่งและฮิสโตแกรม
- ป้ายกำกับ ชื่อเรื่อง และการบันทึกภาพ