φυβλαςのβλογ
phyblas的博客



numpy & matplotlib เบื้องต้น บทที่ ๑๓: ฮิสโทแกรม
เขียนเมื่อ 2016/06/11 22:05
แก้ไขล่าสุด 2021/09/28 16:42
ในบทที่แล้วพูดถึงแผนภูมิแท่งไปแล้ว บทนี้จะพูดถึงแผนภูมิแท่งที่มีรูปแบบพิเศษชนิดหนึ่ง นั่นคือฮิสโทแกรม

ฮิสโทแกรมคือแผนภูมิแท่งที่มีไว้ใช้แจกแจงความถี่ของข้อมูล ว่าข้อมูลในแต่ละช่วงมีจำนวนเท่าไหร่ มีความสำคัญมากในการวิเคราะห์ทางสถิติ



การสร้างฮิสโทแกรม
เราจะสร้างฮิสโทแกรมจาก 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()





อ้างอิง


<< บทที่แล้ว     บทถัดไป >>
หน้าสารบัญ


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> matplotlib

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目录

从日本来的名言
模块
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
机器学习
-- 神经网络
javascript
蒙古语
语言学
maya
概率论
与日本相关的日记
与中国相关的日记
-- 与北京相关的日记
-- 与香港相关的日记
-- 与澳门相关的日记
与台湾相关的日记
与北欧相关的日记
与其他国家相关的日记
qiita
其他日志

按类别分日志



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  查看日志

  推荐日志

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ