Select Page

ในบทความนี้เราจะมาเรียนรู้เรื่องการสร้างกราฟใน Python ด้วย Library ที่ชื่อว่า Matplotlib กันครับ การสร้างกราฟใน Python ด้วย Matplotlib นั้นเป็นอะไรที่ต่างจากการสร้างกราฟที่เราเคยทำใน Excel หรือ Power BI แบบสุดๆ เพราะว่าใน Excel แล้วใช้ User Interface เป็นหลัก เพื่อกำหนดว่ากราฟจะเป็นแบบไหน สีอะไร แต่ใน Python จะต้องใช้การเขียน Code เพื่อสั่งมัน

Matplotlib เป็น Module พื้นฐานในการสร้างกราฟใน Python โดยที่เราจะนำไปต่อยอดด้วย Module อื่นที่ทำกราฟได้สวยขึ้นเช่น Seaborn ด้วย (จะพูดถึงในตอนถัดไป)

ซึ่งความรู้ทั้งหมดนี้นี่จะช่วยให้พวกเราสามารถสร้างกราฟหน้าตาแปลกๆ ขึ้นมาใช้เองด้วยการเรียกใช้ Python Script ใน Power BI ได้ด้วยนะครับ ดังนั้นเรียนรู้ไว้ไม่เสียหายแน่นอน

Install Matplotlib

คำสั่งนี้เรียกครั้งเดียวใน command prompt เพื่อให้ computer เราโหลด script ของ library ตัวนี้มาจาก internet นะ

pip install matplotlib

Import Matplotlib

import matplotlib.pyplot as plt

Concept การทำงานของ Matplotlib

การสร้างกราฟใน Python ด้วย Matplotlib นั้นเราจะต้องเขียน Code เพื่อสั่งว่ากราฟของเราจะมีส่วนประกอบอะไร หน้าตายังไงบ้าง?

เช่น กราฟเป็นประเภทอะไร? ค่า x และ y เป็นอะไร? title แกน x,y คืออะไร? ซึ่งสามารถใส่คำสั่งเพิ่มไปได้เรื่อยๆ (ไม่จำเป็นต้องสั่งรวดเดียวก็ได้)

โดยที่หลังจากที่เราบอกมันว่าส่วนประกอบเป็นอะไรบ้าง ถ้าเป็นการทำ python ใน script ปกติเราจะยังคงมองไม่เห็นผลลัพธ์ทันที ถ้าอยากจะเห็นว่าเป็นยังไง ต้องสั่งให้มัน show กราฟออกมาจึงจะเห็นได้นะครับ

ซึ่งคำสั่ง plt.show() จะไปไล่หาว่ามี object กราฟอะไรถูกสร้างขึ้นมาบ้าง แล้วก็จะแสดงออกมาทุกอันเลย (อาจมีหลายอันก็ได้)

แต่ถ้าเราทำใน colab มันก็จะแสดงกราฟออกมาเลยทันทีโดยครับ

เริ่มสร้างกราฟด้วย Matplotlib

เริ่มจากกราฟเส้น

หากเราสั่ง plt.plot(….) มันจะสร้างกราฟเส้นทันที (ถ้าจะ plot กราฟประเภทอื่นต้องสั่งด้วยคำสั่งอื่น) โดยเราสามารถระบุค่า x และ ค่า y ที่ต้องการได้ ดังนี้

import matplotlib.pyplot as plt
x = [1,3,4,8]
y = [7,10,8,9]
plt.plot(x,y)
plt.show()  #บรรทัดนี้ใน colab ใส่ก็ได้ ไม่ใส่ก็ได้

มันจะให้ผลแบบนี้ ซึ่งจะเห็นว่าเป็นกราฟเส้นซึ่ง plot ค่าระหว่าง x กับ y ต่างๆ

หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 1

การใส่ชื่อกราฟ และ Legend

ถ้าเราจะ plot หลายเส้นในกราฟเดียวก็สั่งเพิ่มไปเลยแบบนี้ และยังระบุ title กราฟ และ legendได้ด้วย

x = [1,3,4,8]
y = [7,10,8,9]
x2 = [1,2,6,8]  # กำหนดค่ากราฟ series ที่สอง
y2 = [3,6,8,10]
plt.plot(x,y,label='Series1')  #ระบุ label สำหรับ legend ได้
plt.plot(x2,y2,label='Series2') # plot กราฟ series ที่สอง
plt.xlabel('x-title') #ชื่อแกน x
plt.ylabel('y-title') #ชื่อแกน y
plt.title('ChartTitle1\nChartTitle2') #ชื่อกราฟ ขึ้นบรรทัดใหม่ได้ด้วย \n
plt.legend()  #แสดง Legend
plt.show()  #บรรทัดนี้ใน colab ใส่ก็ได้ ไม่ใส่ก็ได้
หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 2

กราฟแท่ง และการกำหนดสี

ถ้าอยากจะให้ plot กราฟแท่ง ก็ให้ใช้คำสั่ง plt.bar แทนที่จะเป็น plt.plot แค่นั้นเอง นอกจากนั้นเราสามารถกดหนดสีของแท่งได้ด้วย argument ที่ชื่อว่า color

x = [1,3,4,8]
y = [7,10,8,9]
x2 = [1,2,6,8]  
y2 = [3,6,8,10]
plt.bar(x,y,label='Series1') #ใช้ plt.bar สร้างกราฟแท่ง 
plt.bar(x2,y2,label='Series2', color='red') #กำหนดสีได้ 
plt.xlabel('x-title') 
plt.ylabel('y-title') 
plt.title('ChartTitle1\nChartTitle2') 
plt.legend()  
plt.show()  #บรรทัดนี้ใน colab ใส่ก็ได้ ไม่ใส่ก็ได้
หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 3

กราฟอื่นๆ

นอกจาก plt.plot และ plt.bar แล้ว ก็ยังมีกราฟอื่นๆ อีกเพียบเลย ดูตัวอย่างได้ที่นี่

ลองสร้าง Histogram จากข้อมูล dataframe ของ csv

สมมติว่าผมมีข้อมูลความสูงของตัวละครใน Dragonball เป็นไฟล์ csv ผมก็เอามาทำ histogram ได้ดังนี้

import pandas as pd
DBZ=pd.read_csv('https://raw.githubusercontent.com/ThepExcel/download/master/DBZ.csv')
CharHeight=DBZ['Height'] #ดึงค่าคอลัมน์ Height จาก csv มา

bins=range(0,300,20)  # สร้าง list (หรือ array ก็ได้) ที่เว้นทีละ 20 จาก 0 ถึง 300

plt.hist(CharHeight,bins,histtype='bar',rwidth=0.9)  # กำหนดความกว้างแท่งคือ 0.9 เพราะ 1 จะติดกันเลย
plt.show()  #บรรทัดนี้ใน colab ใส่ก็ได้ ไม่ใส่ก็ได้
หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 4

สร้างกราฟหลายอันในรูปเดียว

การสร้างกราฟหลายๆ กราฟใน figure รูปเดียว นั้นเราสามารถวางตำแหน่งได้ตามต้องการว่าจะวางกราฟแต่ละอันเอาไว้ตรงไหน ซึ่งทำได้หลายวิธี เช่น ใช้คำสั่ง subplot หรือ subplot2grid ก็ได้

แต่วิธีที่ผมคิดว่ายืดหยุ่นดีคือการใช้คำสั่ง subplot2grid ซึ่งจะเป็นการสร้าง grid จำลองขึ้นมา แล้วให้เราระบุว่าจะ plot กราฟไว้ตรงไหนของ grid แล้วให้มันกินพื้นที่ไปแค่ไหน

import matplotlib.pyplot as plt
#subplot2grid(shape, loc, rowspan, colspan)

#ในพื้นที่ 4Rx3C ให้plotตำแหน่ง 0,0 ลงไป 1 แถว ไปทางขวา 3 คอลัมน์
chrt1=plt.subplot2grid((4,3),(0,0),rowspan=1,colspan=3)  

#ในพื้นที่ 4Rx3C ให้plotตำแหน่ง 1,0 ลงไป 2 แถว ไปทางขวา 1 คอลัมน์
chrt2=plt.subplot2grid((4,3),(1,0),rowspan=2,colspan=1)  

#ในพื้นที่ 4Rx3C ให้plotตำแหน่ง 1,1 ลงไป 3 แถว ไปทางขวา 2 คอลัมน์
chrt3=plt.subplot2grid((4,3),(1,1),rowspan=3,colspan=2)  

#ในพื้นที่ 4Rx3C ให้plotตำแหน่ง 3,0 ลงไป 1 แถว ไปทางขวา 1 คอลัมน์
chrt4=plt.subplot2grid((4,3),(3,0),rowspan=1,colspan=1)  
หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 5

ทีนี้เราลองสั่ง plot แต่ละกราฟออกมาได้เลย

import matplotlib.pyplot as plt

#เตรียมพื้นที่
#subplot2grid(shape, loc, rowspan, colspan)
chrt1=plt.subplot2grid((4,3),(0,0),rowspan=1,colspan=3)  
chrt2=plt.subplot2grid((4,3),(1,0),rowspan=2,colspan=1)  
chrt3=plt.subplot2grid((4,3),(1,1),rowspan=3,colspan=2)  
chrt4=plt.subplot2grid((4,3),(3,0),rowspan=1,colspan=1)  

#เริ่มสั่ง plot data ลงไปจริงๆ
x = [1,3,4,8]
y = [7,10,8,9]
chrt1.plot(x,y)  #สั่ง plot ลงพื้นที่แรก

#เอาข้อมูล DBZ เดิมมาทำต่อ
chrt2.hist(CharHeight,bins,histtype='bar',rwidth=0.9)

x = [1,3,4,8]
y = [7,10,8,9]
x2 = [1,2,6,8]  
y2 = [3,6,8,10]
chrt3.bar(x,y,label='Series1') #ใช้ plt.bar สร้างกราฟแท่ง 
chrt3.bar(x2,y2,label='Series2', color='red') #กำหนดสีได้ 
chrt3.legend()

chrt4.plot([1,2,3,4],[6,3,5,8])

plt.show()
หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib 6

ตอนต่อไป Seaborn

สำหรับเนื้อหาเรื่อง Matplotlib เราจะรู้เท่านี้พอก่อน เพราะเดี๋ยวตอนหน้าเราจะเปลี่ยนไปใช้ Seaborn ซึ่งทำกราฟแปลกๆ ได้สะดวกกว่า Matplotlib มากครับ เราค่อยไปเรียนแบบละเอียดกันในนั้นละกันนะ

แชร์ความรู้ให้เพื่อนๆ ของคุณ
  • 568
  •  
  •  
  •  
  •  
  • 568
  •  
  •  
  •  
  •