Python / Өгөгдөл дүрслэх (matplotlib)

Өгөгдөл дүрслэх (matplotlib)

Тоо дүүрэн хүснэгтийг харахад хэв маяг илрүүлэхэд хэцүү. Харин зөв график нэг секундэд бүх зургийг харуулдаг. matplotlib бол Python-ийн хамгийн түгээмэл дүрслэлийн library бөгөөд шугамын график, баарны диаграмм, цэгэн график, дугуй диаграмм зэрэг бүх үндсэн графикийг дэмждэг.

Эхний график

bash
pip install matplotlib
python
import matplotlib.pyplot as plt

# Хамгийн энгийн шугамын график
өдрүүд  = [1, 2, 3, 4, 5, 6, 7]
температур = [−5, −3, 0, 4, 2, −1, 3]

plt.figure(figsize=(8, 4))
plt.plot(өдрүүд, температур, color="royalblue", linewidth=2, marker="o")
plt.title("7 хоногийн температур (°C)")
plt.xlabel("Өдөр")
plt.ylabel("Температур (°C)")
plt.axhline(y=0, color="red", linestyle="--", alpha=0.5)  # тэгийн шугам
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("температур.png", dpi=150)
plt.show()

plt.savefig() нь графикийг файлд хадгалдаг — тайлан, танилцуулгад оруулахад тохиромжтой.

Баарны диаграмм ба дугуй диаграмм

Ангиллын өгөгдлийг харьцуулахад баарны диаграмм хамгийн тод харуулдаг:

python
import matplotlib.pyplot as plt

хотууд  = ["Улаанбаатар", "Дархан", "Эрдэнэт", "Чойбалсан", "Мөрөн"]
хүн_ам  = [1.6, 0.1, 0.09, 0.04, 0.04]   # сая хүн

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# Баарны диаграмм
ax1.bar(хотууд, хүн_ам, color=["#4ade80", "#60a5fa", "#fbbf24", "#a78bfa", "#f87171"])
ax1.set_title("Монголын томоохон хотуудын хүн ам")
ax1.set_ylabel("Хүн ам (сая)")
ax1.tick_params(axis="x", rotation=20)

# Дугуй диаграмм
ax2.pie(хүн_ам, labels=хотууд, autopct="%1.0f%%", startangle=90)
ax2.set_title("Хүн амын харьцаа")

plt.tight_layout()
plt.savefig("хотууд.png", dpi=150)
plt.show()

Pandas-тай хамтарч хэрэглэх

Pandas DataFrame-г шууд matplotlib-д дамжуулж болно — энэ нь хамгийн түгээмэл хэрэглээний хэлбэр:

python
import pandas as pd
import matplotlib.pyplot as plt

# Сарын борлуулалтын өгөгдөл
өгөгдөл = {
    "сар":         ["1-р", "2-р", "3-р", "4-р", "5-р", "6-р"],
    "борлуулалт":  [4200, 3800, 5100, 6300, 5800, 7200],
    "зардал":      [3100, 2900, 3400, 4100, 3900, 4600],
}
df = pd.DataFrame(өгөгдөл)

fig, ax = plt.subplots(figsize=(9, 5))

ax.plot(df["сар"], df["борлуулалт"], marker="o", label="Борлуулалт", color="#4ade80", linewidth=2)
ax.plot(df["сар"], df["зардал"],     marker="s", label="Зардал",     color="#f87171", linewidth=2)
ax.fill_between(df["сар"],
                df["борлуулалт"],
                df["зардал"],
                alpha=0.15, color="#4ade80", label="Ашиг")

ax.set_title("Сарын борлуулалт ба зардал (₮ мянга)")
ax.set_ylabel("Дүн (₮ мянга)")
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("борлуулалт.png", dpi=150)
plt.show()

Гистограмм ба цэгэн график

Өгөгдлийн тархалтыг судлахад гистограмм, хоёр хувьсагчийн хамаарлыг харахад цэгэн график (scatter plot) хэрэглэнэ:

python
import matplotlib.pyplot as plt
import random

random.seed(42)
оноонууд = [random.gauss(75, 12) for _ in range(200)]  # 200 оюутны оноо

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(11, 4))

# Гистограмм — тархалт харах
ax1.hist(оноонууд, bins=20, color="#a78bfa", edgecolor="white", alpha=0.85)
ax1.axvline(sum(оноонууд)/len(оноонууд), color="red", linestyle="--", label="Дундаж")
ax1.set_title("Оноогоор тархалт")
ax1.set_xlabel("Оноо")
ax1.set_ylabel("Оюутны тоо")
ax1.legend()

# Цэгэн график — хамаарал харах
суралцсан_цаг = [o / 10 + random.gauss(0, 1) for o in оноонууд]
ax2.scatter(суралцсан_цаг, оноонууд, alpha=0.4, color="#fbbf24", s=20)
ax2.set_title("Суралцсан цаг vs Оноо")
ax2.set_xlabel("Суралцсан цаг")
ax2.set_ylabel("Оноо")

plt.tight_layout()
plt.savefig("тархалт.png", dpi=150)
plt.show()

matplotlib-ийн subplots() функц олон графикийг нэг зурагт байрлуулах боломж олгодог — тайлан бэлдэхэд маш хэрэгтэй. Графикаа үргэлж tight_layout() дуудсаны дараа хадгалахаа мартуузай — үгүй бол гарчиг, тэнхлэгийн шошго огтлолцож харагдана.

Дараагийн хичээлд:

Python-ийн os, shutil, pathlib зэрэг стандарт модулиудыг ашиглан файл, хавтастай ажиллах автоматжуулалтыг сурна — нэрийг нь өөрчлөх, хуулах, шүүн зохион байгуулах бүгдийг кодоор хийнэ.