ใน
บทที่แล้วพูดถึงแผนภูมิแท่งไปแล้ว บทนี้จะพูดถึงแผนภูมิแท่งที่มีรูปแบบพิเศษชนิดหนึ่ง นั่นคือฮิสโทแกรม
ฮิสโทแกรมคือแผนภูมิแท่งที่มีไว้ใช้แจกแจงความถี่ของข้อมูล ว่าข้อมูลในแต่ละช่วงมีจำนวนเท่าไหร่ มีความสำคัญมากในการวิเคราะห์ทางสถิติ
การสร้างฮิสโทแกรม เราจะสร้างฮิสโทแกรมจาก plt.bar ก็ได้ แต่ก็ยุ่งยาก ใน matplotlib มีฟังก์ชันที่ใช้สร้างฮิสโทแกรมโดยเฉพาะ นั่นคือ plt.hist
การใช้ hist นั้นต้องการอาร์กิวเมนต์แค่ตัวเดียวคือกลุ่มข้อมูลที่ต้องการนำมาแจกแจง ความถี่ และมีคีย์เวิร์ดที่สำคัญตัวหนึ่งคือ bins คือจำนวนช่วงของข้อมูลที่ต้องการแบ่ง
ตัวอย่าง
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10,10,1000)**3
plt.hist(x,bins=100)
plt.show()
หากใส่คีย์เวิร์ด density=1 ไปด้วยจะเป็นการหาความหนาแน่น คือคิดค่าข้อมูลเป็นสัดส่วนต่อข้อมูลทั้งหมด ซึ่งบวกกันทั้งหมดแล้วจะเป็น 1
x = np.linspace(-10,10,1000)**3
plt.hist(x,bins=100,density=1,color='g')
plt.show()
** คีย์เวิร์ดในเวอร์ชันเก่าจะใช้ชื่อเป็น normed แต่เวอร์ชันปัจจุบันเปลี่ยนเป็น density แทน
การนำข้อมูลหลายชุดมาประกอบกัน หากมีข้อมูลอยู่หลายชุดสามารถใส่อาร์กิวเมนต์เป็นลิสต์ของชุดข้อมูล แล้วข้อมูลจะทำการผูกติดเข้าด้วยกันโดยอัตโนมัติ
x1 = np.linspace(-10,10,1000)**3
x2 = np.linspace(-10,10,2000)**3+500
x3 = np.linspace(-10,10,1000)**3+1000
plt.hist([x1,x2,x3],bins=10)
plt.show()
ถ้าเพิ่มคีย์โดยใส่ stacked=1 ลงไปจะกลายเป็นว่ารวมต่อกันในแนวตั้ง
x1 = np.linspace(-10,10,1000)**3
x2 = np.linspace(-10,10,2000)**3+500
x3 = np.linspace(-10,10,1000)**3+1000
plt.hist([x1,x2,x3],bins=10,stacked=1,ec='k')
plt.show()
จะลองใส่แยกโดยใช้ hist ๓ ครั้งก็ได้ จะได้ฮิสโทแกรมที่ซ้อนทับกัน ถ้าอยากให้เห็นทั้งหมดก็ใส่คีย์เวิร์ด alpha ลงไปให้มีความโปร่งใสขึ้นมาได้
x1 = np.linspace(-10,10,1000)**3
x2 = np.linspace(-10,10,2000)**3+500
x3 = np.linspace(-10,10,1000)**3+1000
plt.hist(x1,bins=10,alpha=0.5,ec='k')
plt.hist(x2,bins=10,alpha=0.5,ec='k')
plt.hist(x3,bins=10,alpha=0.5,ec='k')
plt.show()
การกำหนดช่วงของช่องเอาเอง จำนวนแท่งของฮิสโทแกรมนั้นปกติจะกำหนดจากค่า bins ที่ใส่ลงไป แต่ค่า bins นั้นนอกจากจะกำหนดเป็นจำนวนช่องแล้ว หากต้องการกำหนดช่วงตามที่ต้องการเองก็ยังทำได้ด้วย โดยใช้ใส่ค่า bins เป็นลิสต์ของค่าตำแหน่งที่จะใช้เป็นตัวแบ่ง
กรณีนี้เราสามารถสร้างแท่งฮิสโทแกรมที่มีช่วงแบ่งไม่สม่ำเสมอได้
ตัวอย่าง
x1 = np.linspace(-10,10,1000)**3
x2 = np.linspace(-10,10,2000)**3+500
x3 = np.linspace(-10,10,1000)**3+1000
bins = np.linspace(-10,10,10)**3
plt.hist([x1,x2,x3],bins=bins,stacked=1,ec='k')
plt.show()
จะเห็นว่าช่วงแบ่งไม่จำเป็นจะต้องสม่ำเสมอเท่ากันหมด แต่ถ้าเราแบ่งช่วงให้ไม่เท่ากันก็จะได้แผนภูมิที่แท่งกว้างไม่เท่ากันด้วย
ฮิสโทแกรมแนวนอน เช่นเดียวกับแผนภูมิแท่งธรรมดา ฮิสโทแกรมเองก็สามารถทำให้วางแนวนอนได้ แต่ว่าไม่ใช่ด้วยการใช้ฟังก์ชันตัวอื่น แค่ต้องเพิ่มคีย์เวิร์ดลงไปเท่านั้น
แค่ใส่ orientation='horizontal' ลงไปเท่านี้แผนภูมิก็จะเรียงในแนวนอน
ตัวอย่าง
x1 = np.linspace(-1,1,10000)**3
plt.hist(x1,bins=100,alpha=0.5,orientation='horizontal')
plt.show()
อ้างอิง