2021/10/25 NLP Matplotlib(範例2)

Bar chart

長條圖

matplotlib.pyplot.bar
Python 長條圖(Bar Charts)
matplotlib.pyplot.xticks

1
2
3
4
5
6
7
8
9
10
11
12
#繪製長條圖
#%matplotlib inline
#導入必要的模組
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

#指定 x、y座標
x = [4, 5, 6, 7, 8, 9]
y = [2, 10, 3, 2, 8, 7]
plt.bar(x, y) #指定長條圖中的座標
plt.show() #繪製出圖表

水平長條圖

1
2
3
4
5
6
7
8
9
10
11
12
# barh()用來畫水平方向的長條圖
#%matplotlib inline
#導入必要的模組
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

#指定 x、y座標
x = ['sleep', 'study', 'play']
y = [2, 10, 3]
plt.barh(x, y, color='green') #繪製水平方向的長條圖
plt.show() #繪製出圖表

Grouped Bar Charts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#%matplotlib inline
#導入必要的模組
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
N = 5

men_means = (20, 35, 30, 35, 27)
women_means = (25, 32, 34, 20, 25)

ind = np.arange(N) # ind = [0 1 2 3 4]
width = 0.25
#bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
#bar() 的第一個參數是 x 軸上的座標
plt.bar(ind, men_means, width, label='Men')
plt.bar(ind + width, women_means, width, label='Women') #將第二個長條圖的x座標加上width,讓它落在前一個長條圖之後

plt.ylabel('Scores') #調整坐標軸名稱
plt.title('Scores by group and gender') #設定圖表名稱

#xticks(ticks=None, labels=None, **kwargs)
plt.xticks(ind + width / 2, ('G1', 'G2', 'G3', 'G4', 'G5')) #調整刻度的 x 座標,讓它剛好落在中間
plt.legend(loc='best') #標示出各長條圖
plt.show() #繪製出長條圖

Stacked Bar Charts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#%matplotlib inline
#導入必要的模組
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

countries = ['USA', 'GB', 'China', 'Russia', 'Germany']
bronzes = np.array([38, 17, 26, 19, 15])
silvers = np.array([37, 23, 18, 18, 10])
golds = np.array([46, 27, 26, 19, 17])
#產生有序串列,[(0, 'USA'), (1, 'GB'), (2, 'China'), (3, 'Russia'), (4, 'Germany')]
ind = [x for x,_ in enumerate(countries)]


#bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)[source]
#bottom 參數使指要從 y 軸上的哪個座標開始繪製
#bottom=silvers+bronzes,表示要畫在銅牌和銀牌之上
plt.bar(ind, golds, width=0.8, label='golds', color='gold', bottom=silvers+bronzes)
plt.bar(ind, silvers, width=0.8, label='silvers', color='silver', bottom=bronzes)
plt.bar(ind, bronzes, width=0.8, label='bronzes', color='#CD853F')

plt.xticks(ind, countries) #設定x方向的刻度
plt.ylabel("Medals") #設定y座標標題
plt.xlabel("Countries") #設定x座標標題
plt.legend(loc="upper right") #標示出圖表內容
plt.title("2012 Olympics Top Scorers") #賦予圖表標題

plt.show() #繪製出圖表


Scatter chart

matplotlib.pyplot.scatter
在 Matplotlib 中為散點圖設定顏色
Matplotlib 標記散點

散佈圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#繪製散射圖
#%matplotlib inline
#導入需要的套件
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

#指定散佈圖上每一點的座標
x = [4, 4, 7, 7 , 8 , 5]
y = [2, 10, 3, 2 , 8 , 7]

'''scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None,
alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)'''
plt.scatter(x, y, color='red')#用紅色在圖表上標出所有點

plt.show()#繪製圖表

分群散射圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#繪製分群散射圖
#%matplotlib inline
#導入需要的套件
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

# Create data
N = 60 #指定隨機生成的陣列大小
#numpy.random.rand() 函式生成具有隨機值的指定形狀的陣列。
g1 = (0.6 + 0.6 * np.random.rand(N), np.random.rand(N))
g2 = (0.4+0.3 * np.random.rand(N), 0.5*np.random.rand(N))
g3 = (0.3*np.random.rand(N),0.3*np.random.rand(N))
data = (g1, g2, g3)
colors = ("red", "green", "blue") #指定點的顏色
groups = ("coffee", "tea", "water") #指定點的類別
for data, color, group in zip(data, colors, groups): #zip()可以把元素整合成tuple
x, y = data #從data取出點座標
plt.scatter(x, y, alpha=0.8, c=color, edgecolors='m', s=50, label=group) #畫散佈圖

plt.legend(loc=2)#標示圖表內容
plt.title('Matplot scatter plot')#賦予圖表標題
plt.show()#實際繪製出圖表

1
2
3
4
5
x = [1,2,3]
y = [4,5,6]

for i in zip(x,y): #使用 zip函數把 list 內對應元素鏈起來(tuple)
print(i)

Histogram

如何在 Matplotlib 中繪製資料列表的直方圖
matplotlib.pyplot.hist
Numpy numpy.random.rand()函式

直方圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#繪製直方圖
#%matplotlib inline
#導入需要的套件
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

x = [1, 17, 3, 24, 44]

'''hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar',align='mid',
orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)'''

#plt.hist(x, bins=[0, 10, 20, 30, 40, 50])
plt.hist(x, bins=[0, 10, 20, 30, 40, 50], density=True) #bin設定數值區間 #density=True,以個數百分比表示高度

plt.show() #繪製圖表

用高斯常態分配生成資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#%matplotlib inline
#導入需要的套件
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
## Generate gaussian number 高斯常態分配
# mean = 2.0
# std = 3.0
# number of points = 1000
data = np.random.normal(2.0, 3.0, 1000)#用高斯常態分配生成資料
plt.hist(data)#bins預設是10
plt.xlabel('Value')#設定x座標標題
plt.ylabel('Frequency')#設定y座標標題
plt.title('Histogram')#設定圖表的標題
plt.show()#實際繪製出圖表


Boxplot

matplotlib.pyplot.boxplot
Matplotlib 繪製箱線圖

箱型圖

1
2
3
4
5
6
7
8
9
10
11
12
13
#%matplotlib inline
import matplotlib.pyplot as plt
# ref: http://www.datasciencemadesimple.com/box-plot-in-python/

#箱型圖的資料們
value1 = [82,76,24,40,67,62,75,78,71,32,98,89,78,67,72,82,87,66,56,52]
value2=[62,5,91,25,36,32,96,95,3,90,95,32,27,55,100,15,71,11,37,21]
value3=[23,89,12,78,72,89,25,69,68,86,19,49,15,16,16,75,65,31,25,52]
value4=[59,73,70,16,81,61,88,98,10,87,29,72,16,23,72,88,78,99,75,30]

box_plot_data=[value1,value2,value3,value4] #整合資料
plt.boxplot(box_plot_data) #繪製箱型圖
plt.show()#實際繪製圖表


Pie char

matplotlib.pyplot.pie
[Day20]Matplotlib資料視覺化進階!
如何在 Matplotlib 中繪製圓
matplotlib.patches.Circle

圓餅圖

1
2
3
4
5
6
7
8
9
10
11
#繪製圓餅圖
import matplotlib.pyplot as plt

labels = ['Cookies', 'Jellybean', 'Milkshake', 'Cheesecake']#用來標示圖表
sizes = [38.4, 40.6, 20.7, 10.3]#指定每一塊所占比例
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']#指定每一塊的顏色
patches, texts = plt.pie(sizes, colors=colors, shadow=True, startangle=90)#startangle可以指定向逆時針旋轉幾度
plt.legend(patches,labels, loc="best")#標示圖表內容
plt.axis('equal')#plt.axis除了可以設定x和y軸也可以設定其他樣式,ex: equal可以讓x和y軸的單位一樣。
plt.tight_layout()#tight_layout() 方法會自動保持子圖之間的正確間距
plt.show()

調整特定塊向外移動(explode)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#繪製圓餅圖
#%matplotlib inline
import matplotlib.pyplot as plt
# ref: https://matplotlib.org/examples/pie_and_polar_charts/pie_demo_features.html
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'#用來標示圖表
sizes = [15, 30, 45, 10]#指定每一塊所占比例
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') 向外位移指定的塊,同時指定位移的量

'''fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.'''

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90) #autopct 標示每一塊佔的比例,保留到小數點後一位
plt.axis('equal') ##plt.axis除了可以設定x和y軸也可以設定其他樣式,ex: equal可以讓x和y軸的單位一樣。
plt.show()

變化版的圓餅圖,圓環圖!?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#%matplotlib inline
import matplotlib.pyplot as plt
# Pie chart
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']#用來標示圖表
sizes = [15, 30, 45, 10]#指定每一塊所占比例

#colors
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']#指定每一塊的顏色

#explsion
explode = (0.05,0.05,0.05,0.05)

#pcdistance設定數字離圓心的距離
plt.pie(sizes, colors = colors, labels=labels, autopct='%1.1f%%', startangle=90, pctdistance=0.85, explode = explode)

#draw circle
centre_circle = plt.Circle((0,0),0.70,fc='white')#fc設定圓形的顏色 0.70是透明度
fig = plt.gcf() #get current figure
# Matplotlib.axes.Axes.add_artist() 在坐標軸上添加新的圖
#使用 add_artist 方法在軸上新增 circle,因為 circle 是 Artist 的子類
fig.gca().add_artist(centre_circle)#gca()方法圖形模塊用於獲取當前軸

# Equal aspect ratio ensures that pie is drawn as a circle
plt.axis('equal')
plt.tight_layout()
plt.show()

分享到