บทนำ
ลำดับแท่งใน bar chart ตามลำดับข้อมูลใน DataFrame ค่าเริ่มต้น ใช้ sort_values() จัดเรียง DataFrame ก่อนพลอท เพื่อควบคุมลำดับแท่ง
ตัวอย่างโค้ด
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# ข้อมูลต้นทาง (ไม่เรียง)
df = pd.DataFrame({
'names': ['John', 'James', 'David', 'Gary', 'Watson'],
'marks': [23, 34, 30, 19, 20]
})
print("DataFrame ต้นทาง:")
print(df)
# Subplot 1: ลำดับต้นทาง
plt.subplot(1, 2, 1)
plt.bar('names', 'marks', data=df, color='green')
plt.title("Original Order")
# Subplot 2: เรียงตาม marks
df_sorted = df.sort_values('marks')
plt.subplot(1, 2, 2)
plt.bar('names', 'marks', data=df_sorted, color='blue')
plt.title("Sorted by Marks")
plt.show()
ผลลัพธ์
กราญซ้าย: John(23), James(34), David(30), Gary(19), Watson(20) - ตามลำดับ DataFrame
กราญขวา: Gary(19), Watson(20), John(23), David(30), James(34) - เรียงน้อยไปมาก
วิธีควบคุมลำดับอื่นๆ
1. Categorical ด้วย ordered categories
# กำหนดลำดับเฉพาะ
custom_order = ['Gary', 'Watson', 'John', 'David', 'James']
df['names'] = pd.Categorical(df['names'], categories=custom_order, ordered=True)
df = df.sort_values('names')
plt.bar('names', 'marks', data=df)
2. ใช้ order parameter ใน seaborn
import seaborn as sns
sns.barplot(x='names', y='marks', data=df, order=custom_order)
3. เรียงตามคอลัมน์อื่น (multi-column sort)
df_sorted = df.sort_values(['marks', 'names'], ascending=[False, True])
# เรียง marks มาก→น้อย, ถ้าเท่ากัน เรียงชื่อ A-Z
4. Horizontal Bar Chart (barh)
plt.barh('names', 'marks', data=df_sorted, color='blue')
plt.title("Horizontal Bar Chart (Sorted)")
# แท่งแนวนอน อ่านชื่อง่ายกว่า
การปรับแต่ง Bar Chart
plt.bar(
'names', 'marks', data=df_sorted,
color='steelblue',
edgecolor='black',
linewidth=1.2,
width=0.6, # ความกว้างแท่ง
align='center', # จัดกลาง tick
alpha=0.8
)
# เพิ่มค่าบนแท่ง
for i, v in enumerate(df_sorted['marks']):
plt.text(i, v + 0.5, str(v), ha='center', fontweight='bold')
plt.xlabel('Name')
plt.ylabel('Marks')
plt.title('Marks by Student (Sorted)')
plt.tight_layout()
สรุป
ลำดับแท่ง = ลำดับแถวใน DataFrame ใช้ df.sort_values('column') จัดเรียงก่อนพลอท สำหรับลำดับกำหนดเอง ใช้ pd.Categorical หรือ seaborn order= parameter