🎯 今日目標
- 掌握 Matplotlib 的基本繪圖方法(折線圖、柱狀圖、餅圖)
- 掌握 Seaborn 的高級繪圖方法(分類圖、分布圖、箱線圖)
- 熟悉圖像美化(標題、標簽、顏色、風格)
- 完成一組學生成績數據的可視化展示
🧱 一、Matplotlib 基礎繪圖
import matplotlib.pyplot as plt# 示例數據
names = ["張三", "李四", "王五", "趙六"]
scores = [88, 92, 75, 60]# 折線圖
plt.plot(names, scores, marker="o")
plt.title("學生成績折線圖")
plt.xlabel("姓名")
plt.ylabel("成績")
plt.grid(True)
plt.show()
? 常見圖表類型
# 柱狀圖
plt.bar(names, scores)# 餅圖
plt.pie(scores, labels=names, autopct="%.1f%%")# 保存圖像
plt.savefig("charts/score_chart.png")
🌈 二、Seaborn 入門(更美觀 + 高級)
import seaborn as sns
import pandas as pd# 示例 DataFrame
df = pd.DataFrame({"姓名": names,"成績": scores,"性別": ["男", "女", "男", "女"]
})# 設置風格
sns.set_style("whitegrid")# 分類柱狀圖
sns.barplot(data=df, x="姓名", y="成績", hue="性別")
plt.title("學生成績(按性別)")
plt.show()
🎨 三、其他 Seaborn 圖示示例
# 成績分布直方圖
sns.histplot(df["成績"], bins=5)# 箱線圖:成績分布(可識別異常值)
sns.boxplot(data=df, x="性別", y="成績")# 成績與是否及格關系散點圖(需添加字段)
sns.scatterplot(data=df, x="成績", y="是否及格")
🧪 今日練習任務
使用 students_cleaned.csv
(前兩天清洗的表格數據)文件,完成以下圖表:
-
所有學生成績的折線圖 & 柱狀圖
-
不同性別的平均成績柱狀圖
-
所有學生成績分布直方圖
-
學生成績箱線圖(按性別分組)
-
將所有圖像保存為 PNG 圖片到
charts/
文件夾import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import osrc = {'font.sans-serif': 'Arial Unicode MS','axes.unicode_minus': False} # 設置中文字體支持(如 matplotlib 出現亂碼) plt.rcParams['font.family'] = 'Arial Unicode MS' # Mac 用戶可用 # plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows 用戶用這行 plt.rcParams['axes.unicode_minus'] = False# 路徑設置 input_path = "data/students_cleaned.csv" output_dir = "charts" os.makedirs(output_dir, exist_ok=True)# 加載數據 df = pd.read_csv(input_path) print("? 已加載學生數據:") print(df.head())# -------- 圖表 1:學生成績折線圖 -------- plt.figure(figsize=(8, 5)) plt.plot(df["姓名"], df["成績"], marker='o') plt.title("學生成績折線圖") plt.xlabel("姓名") plt.ylabel("成績") plt.grid(True) plt.tight_layout() plt.savefig(f"{output_dir}/成績折線圖.png") plt.close()# -------- 圖表 2:學生成績柱狀圖 -------- plt.figure(figsize=(8, 5)) plt.bar(df["姓名"], df["成績"], color="skyblue") plt.title("學生成績柱狀圖") plt.xlabel("姓名") plt.ylabel("成績") plt.tight_layout() plt.savefig(f"{output_dir}/成績柱狀圖.png") plt.close()# -------- 圖表 3:不同性別的平均成績柱狀圖 -------- plt.figure(figsize=(6, 4)) sns.set(style="whitegrid", rc=rc) avg_by_gender = df.groupby("性別")["成績"].mean().reset_index() sns.barplot(data=avg_by_gender, x="性別", y="成績", hue='性別', palette="Set2", legend=False) plt.title("不同性別的平均成績") plt.tight_layout() plt.savefig(f"{output_dir}/性別平均成績柱狀圖.png") plt.close()# -------- 圖表 4:成績分布直方圖 -------- plt.figure(figsize=(6, 4)) sns.histplot(df["成績"], bins=5, kde=True, color="orange") plt.title("成績分布直方圖") plt.xlabel("成績") plt.tight_layout() plt.savefig(f"{output_dir}/成績分布直方圖.png") plt.close()# -------- 圖表 5:成績箱線圖(按性別) -------- plt.figure(figsize=(6, 4)) sns.boxplot(data=df, x="性別", y="成績", hue="性別", palette="Pastel1", legend=False) plt.title("成績箱線圖(按性別)") plt.tight_layout() plt.savefig(f"{output_dir}/成績箱線圖_按性別.png") plt.close()print(f"\n? 所有圖表已生成并保存至:{output_dir}/")
?? 今日總結
- 掌握了 Matplotlib 基本圖形繪制技巧
- 掌握了 Seaborn 的分類、分布圖制作方法
- 能基于清洗后的數據完成完整的圖形展示
- 理解了圖表選擇和美化對表達分析結論的重要性