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



numpy & matplotlib เบื้องต้น บทที่ ๒๐: กราฟไม้ขีดไฟ
เขียนเมื่อ 2016/06/12 00:52
แก้ไขล่าสุด 2021/09/28 16:42
กราฟเส้นโดยทั่วไปนั้นจะมีแค่การลากเส้นระหว่างจุดกับจุดไปเรื่อยๆเท่านั้น ส่วนที่เหลือจะดูโล่งๆ

แต่ในบางครั้งเราอาจจะอยากมองเห็นภาพความสัมพันธ์ระหว่างค่าบนกราฟกับเส้นแกน ในกรณีแบบนั้นกราฟไม้ขีดไฟอาจเป็นตัวเลือกที่ดี

กราฟไม้ขีดไฟคือกราฟที่มีลักษณะเป็นแท่งๆลากจากเส้นแกนมายังจุดบนกราฟ ใน matplotlib สามารถสร้างขึ้นได้จากฟังก์ชัน plt.stem

ตัวอย่างการใช้เบื้องต้น
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(50)
y = np.sin(x/5.)**2+0.5
plt.stem(x,y)
plt.show()



จะเห็นว่าเส้นลากจากแกนมายังจุดบนกราฟ แต่ว่าไม่มีเส้นกราฟมีแต่จุดปรากฏ

แต่เราสามารถใส่เส้นกราฟเข้าไปได้โดยใช้คีย์เวิร์ด markerfmt ใส่รูปแบบเส้น รูปแบบจุด และสีลงไปได้ตรงนี้
x = np.arange(100)
y = np.sin(x/5.)
plt.stem(x,y,markerfmt='-r')
plt.show()



พอทำแบบนี้แล้วทำให้ดูแล้วคล้ายกับเวลาที่เขียนรูปเพื่อแสดงพื้นที่ใต้กราฟ สามารถนำมาใช้

ส่วนรูปแบบของเส้นก้านไม้ขีดก็สามารถกำหนดได้ด้วยคีย์เวิร์ด linefmt เพียงแต่ว่าหากไม่ได้กำหนดสีด้วยจะออกมาเป็นเส้นหลากสี และหากกำหนดรูปแบบของจุดจะได้จุดออกมาทั้งสองด้าน
x = np.arange(20)
y = np.cos(x/4.)
plt.stem(x,y,linefmt=':D',markerfmt='-r')
plt.show()



ดังนั้นถ้าไม่อยากให้ออกมาหลากสีก็ควรกำหนดสีให้เส้นไม้ขีดด้วย และถ้าอยากให้จุดมีแค่ที่ปลายไม่มีที่ฐานก็ให้กำหนดรูปแบบจุดที่ส่วนของ markerfmt แทน

เส้นที่ฐานสามารถเปลี่ยนรูปแบบได้เช่นกันด้วย คีย์เวิร์ด basefmt นอกจากนี้ยังสามารถย้ายตำแหน่งได้ด้วยคีย์เวิร์ด bottom ไม่จำเป็นจะต้องอยู่ที่ตำแหน่ง 0 ตลอด
x = np.arange(80)
y = np.cos(x)+np.cos(x*1.1)
plt.stem(x,y,linefmt=':c',markerfmt='-ro',basefmt='.-m',bottom=-2.5)
plt.show()



เพียงแต่ว่าหากต้องการเปลี่ยนรูปแบบให้หลากหลายกว่านี้จะต้องมาปรับค่าในภายหลัง

เวลาที่ใช้ฟังก์ชัน plt.stem หากนำตัวแปรมารับค่าจะได้ค่าคืนกลับเป็นลิสต์ของออบเจ็กต์ ๓ ตัว คือของเส้นกราฟ, เส้นไม้ขีด, และเส้นฐาน ตามลำดับ

หากเราเอาตัวแปร ๓ ตัวมารับเราก็จะสามารถปรับค่าของแต่ละตัวได้โดยใช้ฟังก์ชัน plt.setp ค่าที่สามารถปรับได้ก็จะคล้ายๆค่าที่ปรับได้ในกราฟเส้นธรรมดา
linewidth หรือ lw ความหนาของเส้น
linestyle หรือ ls รูปแบบของเส้น
marker รูปแบบของจุด
markersize หรือ ms ขนาดของจุด
color หรือ c สีของเส้น

ตัวอย่าง
x = np.linspace(0,10,40)
y = np.sin(x*2)+np.cos(x*2.1)+3
sengraph, senmaikhit, senthan = plt.stem(x,y,bottom=2.25)
plt.setp(sengraph, lw=5,ls=':',c='#558800',marker='d',ms=10)
plt.setp(senmaikhit, linewidth=2,c='#CC2233',marker='')
plt.setp(senthan, linewidth=6,c='#005522')
plt.show()



เส้นไม้ขีดแต่ละเส้นเป็นออบเจ็กต์แยกคนละชิ้นกัน หากอยากปรับให้แต่ละอันต่างกันก็สามารถใช้ for วนซ้ำเพื่อปรับแก้ค่าทีละเส้นได้

นอกจากนี้ส่วนใหญก็คล้ายกราฟเส้นโค้ง สามารถใส่ label กับ legend ได้

ลองวาดสองกราฟพร้อมกันแล้วตั้งค่าต่างๆ ฟังก์ชัน setp สามารถใส่เป็นลิสต์เพื่อตั้งค่าพร้อมกันทีเดียวได้
x = np.linspace(0,10,50)
y1 = np.sin(x*3)+np.sin(x*3.2)+3
y2 = np.cos(x*3)+np.cos(x*3.3)-3
sengraph1, senmaikhit1, senthan1 = plt.stem(x,y1,label='$sin(3x)+sin(3.2x)+3$')
sengraph2, senmaikhit2, senthan2 = plt.stem(x,y2,label='$cos(3x)+cos(3.3x)-3$')
plt.setp(sengraph1, lw=5,ls=':',c='#998800',marker='d',ms=10)
plt.setp(sengraph2, lw=5,ls=':',c='#008899',marker='d',ms=10)
plt.setp([senmaikhit1,senmaikhit2], linewidth=2,c='#CC9932',marker='')
plt.setp([senthan1,senthan2], linewidth=6,c='#005592')
plt.legend(loc=7)
plt.show()





อ้างอิง


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


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

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

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

หมวดหมู่

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

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

目录

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

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

按类别分日志



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

  查看日志

  推荐日志

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