matplotlib 模組

matplotlib是Python語言及其數值計算庫NumPy的繪圖庫,可以很輕鬆地將數據視覺化,且提供多樣的格式

1.折線圖:plot

plt.plot([x軸座標串列], [y軸座標串列] [,其他參數])

■ linewidth= or lw=:線條寬度,預設1.0


■ color=:設定線條顏色,預設為藍色,設定值如下

顏色代表值顏色代表值
藍色 b, blue青色c, cyan
紅色 r, red酒紅m, megenta
綠色 g, green黑色k, black
黃色 y, yello白色w, white

■ linestyle= or ls=:設定線條樣式,預設值為實線「-」, 其他有虛線「–」 、點虛線「-.」 、點線「:」 。

■ marker=:設定點的標記樣式,設定值如下

符號說明符號說明
“.”,”o”,”*”點型、圓型、星型“h”,”H”六邊形(立著、橫著)
“^”,”v”正、反三角形“d”,”D”菱形(瘦、胖)
“<“,”>”左、又三角形“x”,”+”十字
“s”矩形“_”,”|”橫線、直線
“p”五角形“1”,”2″,”3″,”4″消波塊

■ markersize= or ms=:標記(marker)的大小

■ color、linestyle、marker組合字串:這三個值可以直接合併使用,如紅色時線星狀標記’r-*’

■ 設置中文:預設狀態下因模組沒有配置中文字形,需輸入中文可使用matplotlib的 rcParams函數更改字體

#為微軟正黑體,也可設mingliu(明體)或DFKai-SB(楷體)
plt.rcParams["font.sans-serif"] = "Microsoft JhengHei" 
# 設定中文字型及負號正確顯示
plt.rcParams["axes.unicode_minus"] = False     
import matplotlib.pyplot as plt
listx = [0,5,10,15,20,25,30]
listy = [10,13,40,32,20,60,70]
listx2 = [0,3,6,15,18,22,27]
listy2 = [10,20,10,33,26,55,62]
# 以座標為錨點,color為線的顏色,lw為線的寬度,ls為線的樣式,label為線的名子
#linewidth or lw
#color
#linestyle or ls
#marker
#markersize or ms
plt.plot(listx, listy, 
    linewidth='2.0', 
    linestyle='--', 
    color='red', 
    label='red_line',
    marker='*',
    markersize=16
)
plt.plot(listx2, listy2,
    lw = '2.0',
    ls = '-.',
    color = 'b',
    label = 'blue_line',
    marker = '^',
    ms = '12'
)
plt.title("red_title", fontsize=20)     #圖表標題和字體大小
plt.xlabel("x-label", fontsize=10)      #x軸標題和字體大小
plt.ylabel('y-label', fontsize=10)      #y軸標題和字體大小

plt.xlim(0, 30)     #設定x軸範圍
plt.ylim(0, 70)     #設定y軸範圍


plt.xticks([x for x in range(0,30)])      #設定x軸座標的刻度,串列形式
plt.yticks(range(0,70,3))                 #設定y軸座標的刻度
#也可設定刻度的格式
plt.tick_params(axis='both', labelsize=10, color='b')


#plt.grid(True)     設定格線,預設模式
#也可進一步設定格線模式,分別為顏色、線條模式、寬度及透明度
plt.grid(color='b', linestyle=":", linewidth=1, alpha=0.5)


# label='label'需要搭配legend()函數才有效果
plt.legend()
plt.show()

2.長條圖:bar

plt.bar(x軸串列, y軸串列, width=長條寬度, bottom=y軸起始位置 [,其他參數])

■ width=:每一個長條的寬度,以兩個長條間的距離為基準,用百分比來表示,預設值為0.8。

■ bottom=:設定每個長條的y軸起始位置,不設定時預設為0,用串列表示

■ color=:設定每個長條的顏色,預設為藍色,紅色可用color=’r’來表示,不同顏色可串列表示,如color=[‘r’,’g’,’b’] 紅綠藍顏色循環

■ plt.xlabel(‘名稱’)、plt.ylabel(‘名稱’):設定軸的名稱,需搭配legend()函數使用

■ plt.title(‘圖表名稱’):設定圖表的名稱

#長條圖:bar
import matplotlib.pyplot as plt
listx = ['Python','C','C++','C#','JAVA','Visual Basic', 'Other']
listy = [11.27,11.16,7.5,5.26,10.46,5.24,49.11]

#繪製長條圖,width為長條圖的寬度,依比例調整(0.0~1.0)
#color=['r', 'g', 'b']可以讓顏色照r,g,b順訊循環下去,可用list或tuple
plt.bar(listx, listy, width=0.8, bottom=0, color=['r','g','b'])
plt.title('程式語言使用人數')
plt.xlabel('程式語言')
plt.ylabel('使用人數')
#plt.barh(listy, listx, height=0.8, left=0 )

# 設定中文字型及負號正確顯示
plt.rcParams["font.sans-serif"] = "Microsoft JhengHei" 
plt.rcParams["axes.unicode_minus"] = False
plt.legend()
plt.show()

3.橫條圖:barh

plt.barh(y軸串列, x軸串列, height=長條高度(寬度)預設0.8, left=x軸起始位置 )

■ y軸座標:顯示每個長條(項目)的名稱串列或是序列串列

■ x軸座標:顯示每個長條的數值串列

■ color=:設定每個長條的顏色,預設為藍色,紅色可用color=’r’來表示,不同顏色可串列表示,如color=[‘r’,’g’,’b’] 紅綠藍顏色循環

■ height=:設定每個長條的高度,因為是橫條圖所以設定上是寬度,以百分比來表示,預設0.8

■ left=:設定每個長條y軸的起始位置,可以串列表示每個長條不同的起始位置,預設值為0

■ plt.xlabel(‘名稱’)、plt.ylabel(‘名稱’):設定軸的名稱,需搭配legend()函數使用

■ plt.title(‘圖表名稱’):設定圖表的名稱

#橫條圖:barh
import matplotlib.pyplot as plt

listx = ['Python','C','C++','C#','JAVA','Visual Basic', 'Other']
listy = [11.27,11.16,7.5,5.26,10.46,5.24,49.11]

plt.barh(listx, listy, height=0.5, color=['r', 'g', 'b'], left=0)
plt.title('資訊課選修人數')
plt.xlabel('使用人數')
plt.ylabel('程式語言')


# 設定中文字型及負號正確顯示
plt.rcParams["font.sans-serif"] = "Microsoft JhengHei" 
plt.rcParams["axes.unicode_minus"] = False
plt.legend()
plt.show()

4.散佈圖:scatter

plt.scatter(x軸串列, y軸串列, s=大小尺寸, color=’顏色’,marker=’標記’, alpha=透明度0~1)

■ s=:大小尺寸數值組成的串列

■ color= or c=:設定顏色,字串或是串列(多種顏色)

■ m=:marker標記樣式,預設為’o’圓形

■ alpha=:透明度,數值範圍在0.0~1.0之間

import matplotlib.pyplot as plt

listx = [31,15,20,25,12,18,45,21,33,5,18,22,37,42,10]
listy = [68,20,61,32,45,56,10,18,70,64,43,66,19,77,21]
scale = [x**3 for x in [5,4,2,6,7,1,8,9,2,3,2,4,5,7,2]]
# 上述scale的表示法,等同於底下利用for迴圈填值
# scale = []
# for x in [5,4,2,6,7,1,8,9,2,3,2,4,5,7,2]:
#    scale.append(x**3)

plt.xlim(0,50)
plt.ylim(0,80)
# 繪製參考線
plt.plot([0,50], [0, 80])
# 繪製散佈圖,顏色只能放一種
plt.scatter(listx, listy, color='r', s=scale, marker='s', alpha=0.5)

# 繪製第二組散佈圖
listx2 = [31,33,5,18,22,37,42,10,15,20,25,12,18,45,21]
listy2 = [68,20,61,32,45,56,10,18,70,64,43,66,19,77,21]
scale2 = [x**2 for x in [1,8,9,2,3,2,4,5,7,2,5,4,2,6,7]]
plt.scatter(listx2, listy2, c='b', s=scale2, marker='o', alpha=0.7)

plt.show()

5.圓餅圖:pie

plt.pie(資料串列[, 其他串列參數])

■ labels=:每一組資料標題組成的串列

■ colors=:設定顏色,每一個資料顏色組成的字串或是串列,如[‘r’, ‘g’, ‘b’]

■ explode=:餅凸出來的距離參數,半徑為1

■ labeldistance=:項目的標題與圓心的距離是半徑的多少倍

■ autopct=:項目百分比的格式,例如:「%2.1f%%」表示整數兩位,小數一位

■ pctdistance=:百分比的文字與圓心的距離是半徑的多少倍

■ shadow=:是否顯示陰影,型態為bool

■ startangle=:開始繪圖的起始角度,起始角度從第一象限與第四象限的x軸以逆時針旋轉開始計算,90度代表從正y軸開始計算

import matplotlib.pyplot as plt
sizes = [25, 30, 15, 10]
labels = ["野比大雄", "源靜香", "骨川小夫", "剛田武"]
colors = ["red", "green", "blue", "yellow"]
explode = (0, 0, 0.2, 0)
plt.pie(sizes, 				#各個餅尺寸
	explode = explode, 		#餅凸出來的參數
	labels = labels, 		#每一個項目標題組成的串列
	colors = colors,		#每一個顏色組成的串列
	labeldistance = 1.1, 	#項目標題離圓心的距離的半徑的倍數
	autopct = "%2.1f%%", 	#項目百分比的格式,2為整數兩位,.1為小數後一位,依照sizes來計算百分比
	pctdistance = 0.6,		#百分比的文字距離圓心的半徑的倍數
	shadow = True,			#影子是否開啟
	startangle = 90)		#開始繪圖的起始角度,起始角度從第一象限與第四象限的x軸以逆時針旋轉開始計算,90度代表從正y軸開始計算
# 設定中文字型及負號正確顯示
plt.rcParams["font.sans-serif"] = "Microsoft JhengHei" 
plt.rcParams["axes.unicode_minus"] = False	
plt.show()

6.設定圖表區:figure

plt.figure([屬性參數])

■ figsize=[寬:高]:設定圖表區的寬高,預設為[6.4:4.8]

■ dip=:設定解析度,單位為每英寸像素點

■ facecolor=:設定背景顏色,預設為白色

■ edgecolor=:設定邊線顏色,預設值為白色

■ linewidth=:設定線寬

■ frameon=:是否有邊框,bool型態

■ tight_layout=:設定多個圖表是否有邊界,bool型態

# 新增圖表區
plt.figure()
plt.plot([1,2,3])
# 只有一個list會當成y軸
#plt.plot([0, 1, 2], [1,2,3])
#上面這行和plt.plot([1,2,3])的意思是一樣的,如果沒有給x軸參數會拿index當成x軸的參數

# 新增圖表區並設定屬性
plt.figure(figsize=[8,4], 
    dpi=84, 
    facecolor="whitesmoke", 
    edgecolor="r", 
    linewidth=1, 
    frameon=True
    )
plt.plot([1,2,3],[5,11,3])

plt.show()

用欄列來表示多張圖表:

plt.subplot(row數,col數,圖表索引值)

import matplotlib.pyplot as plt

plt.figure(figsize=[8,8])       #設定圖表區尺寸為8*8英寸
plt.subplot(211)                #row數為2,col數為1,圖表索引值指定為1
#兩列一欄的第一個圖
#plt.subplot(2,1,1)這種表示方法也可以
plt.title(label='index_1')
plt.plot([1,2,3],'r:o')         #紅色、點線、圖示標籤為o

plt.subplot(212)
#兩列一欄的第二個圖
#plt.subplot(211)跟plt.subplot(212)也可以反過來,表示Chart 2在上面
plt.title(label='index_2')
plt.plot([1,2,3],'g--o')        #綠色、虛線、圖示標籤為o

plt.show()
import matplotlib.pyplot as plt

plt.figure(figsize=[8,8])       #設定圖表區尺寸為8*8英寸
plt.subplot(121)                #row數為1,col數為2,圖表索引值指定為1
plt.title(label='index_1')
plt.plot([1,2,3],'r:o')

plt.subplot(122)                #row數為1,col數為2,圖表索引值指定為2
plt.title(label='index_2')
plt.plot([1,2,3],'g--o')

plt.show()

用相對位置排列多張圖表:

plt.axes([與左邊邊界的距離, 與下邊邊界的距離, 寬, 高])

注意!在vscode使用axes()函數可能會有點問題!

import matplotlib.pyplot as plt

plt.figure(figsize=[8, 4])  # 設定圖表大小
plt.axes([0, 0, 0.4, 1])
plt.title(label='no1')
plt.plot([1, 2, 3], 'r:o')

plt.axes([0.5, 0, 0.4, 1])
plt.title(label='no2')
plt.plot([1, 2, 3], 'g--o')

plt.show()
import matplotlib.pyplot as plt

plt.figure(figsize=[8,4])
plt.axes([0,0,0.8,1])
plt.title(label='no1')
plt.plot([1,2,3],'r:o')

plt.axes([0.55,0.1,0.2,0.2])
plt.title(label='no2')
plt.plot([1,2,3],'g--o')

plt.show()

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *