文章目錄
- 1. Matplotlib 簡介
- 2. 安裝
- 3. Matplotlib Pyplot
- 4. 繪制圖表
- 1. 折線圖
- 2. 散點圖
- 3. 柱狀圖
- 4. 餅圖
- 5. 直方圖
- 5. 中文顯示
1. Matplotlib 簡介
Matplotlib 是 Python 的繪圖庫,它能讓使用者很輕松地將數據圖形化,并且提供多樣化的輸出格式。
Matplotlib 可以用來繪制各種靜態,動態,交互式的圖表。
Matplotlib 是一個非常強大的 Python 畫圖工具,我們可以使用該工具將很多數據通過圖表的形式更直觀的呈現出來。
Matplotlib 可以繪制線圖、散點圖、等高線圖、條形圖、柱狀圖、3D 圖形、甚至是圖形動畫等等。
2. 安裝
升級 pip:
python3 -m pip install -U pip
安裝 matplotlib 庫:
python3 -m pip install -U matplotlib
安裝完成后,我們就可以通過 import 來導入 matplotlib 庫:
import matplotlibprint(matplotlib.__version__)
3. Matplotlib Pyplot
Pyplot 是 Matplotlib 的子庫,提供了和 MATLAB 類似的繪圖 API。
Pyplot 是常用的繪圖模塊,能很方便讓用戶繪制 2D 圖表。
Pyplot 包含一系列繪圖函數的相關函數,每個函數會對當前的圖像進行一些修改,例如:給圖像加上標記,生新的圖像,在圖像中產生新的繪圖區域等等。
使用的時候,我們可以使用 import 導入 pyplot 庫,并設置一個別名 plt:
import matplotlib.pyplot as plt
這樣我們就可以使用 plt 來引用 Pyplot 包的方法。
以下是一些常用的 pyplot 函數:
plot()
:用于繪制線圖和散點圖scatter()
:用于繪制散點圖bar()
:用于繪制垂直條形圖和水平條形圖hist()
:用于繪制直方圖pie()
:用于繪制餅圖imshow()
:用于繪制圖像subplots()
:用于創建子圖
4. 繪制圖表
1. 折線圖
import matplotlib.pyplot as plt
#繪制簡單的圖表
input_values = [1,2,3,4,5]
squares = [1,4,9,16,25]
plt.plot(input_values,squares,linewidth=1)
plt.show()
繪制過程中,我們可以自定義線的樣式,包括線的類型、顏色和大小等
1.線的類型可以使用 linestyle 參數來定義,簡寫為 ls。
類型 | 簡寫 | 說明 |
---|---|---|
‘solid’ (默認) | ‘-’ | 實線 |
‘dotted’ | ‘:’ | 點虛線 |
‘dashed’ | ‘–’ | 破折線 |
‘dashdot’ | ‘-.’ | 點劃線 |
‘None’ | ‘’ 或 ’ ’ | 不畫線 |
import matplotlib.pyplot as plt
import numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, linestyle = 'dotted')
plt.show()
2.線的顏色可以使用 color 參數來定義,簡寫為 c。
顏色標記 | 描述 |
---|---|
‘r’ | 紅色 |
‘g’ | 綠色 |
‘b’ | 藍色 |
‘c’ | 青色 |
‘m’ | 品紅 |
‘y’ | 黃色 |
‘k’ | 黑色 |
‘w’ | 白色 |
這里是基礎的簡單顏色,可以自定義顏色,查一下html顏色值即可
import matplotlib.pyplot as plt
import numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, color = 'r')
plt.show()
3.線的寬度可以使用 linewidth 參數來定義,簡寫為 lw,值可以是浮點數,如:1、2.0、5.67 等。
import matplotlib.pyplot as plt
import numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, linewidth = '12.5')
plt.show()
4.多條線的繪制
plot() 方法中可以包含多對 x,y 值來繪制多條線。
import matplotlib.pyplot as plt
import numpy as npy1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 2, 13, 10])plt.plot(y1)
plt.plot(y2)plt.show()
2. 散點圖
使用 pyplot 中的 scatter() 方法來繪制散點圖。
scatter() 方法語法格式如下:
matplotlib.pyplot.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)
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
plt.rcParams['figure.figsize']=(2,2)
x=np.random.normal(size=100)
y=np.random.normal(size=100)
plt.scatter(x,y)
plt.show()
注:繪制折線圖、散點圖時,如果想給坐標定義一些不一樣的標記,就可以使用 plot() 方法的 marker 參數來定義。
import matplotlib.pyplot as plt
import numpy as npypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])plt.plot(ypoints, marker = 'o')
plt.show()
3. 柱狀圖
可以使用 pyplot 中的 bar() 方法來繪制柱形圖。
bar() 方法語法格式如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
參數說明:
x:浮點型數組,柱形圖的 x 軸數據。
height:浮點型數組,柱形圖的高度。
width:浮點型數組,柱形圖的寬度。
bottom:浮點型數組,底座的 y 坐標,默認 0。
align:柱形圖與 x 坐標的對齊方式,‘center’ 以 x 位置為中心,這是默認值。 ‘edge’:將柱形圖的左邊緣與 x 位置對齊。要對齊右邊緣的條形,可以傳遞負數的寬度值及 align=‘edge’。
**kwargs::其他參數。
import numpy as np
import matplotlib.pyplot as plt
# 創建一個點數為 8 x 6 的窗口, 并設置分辨率為 80像素/每英寸
plt.figure(figsize=(10, 10), dpi=80)
# 柱子總數
N = 10
# 包含每個柱子對應值的序列
values = (56796,42996,24872,13849,8609,5331,1971,554,169,26)
# 包含每個柱子下標的序列
index = np.arange(N)
# 柱子的寬度
width = 0.45
# 繪制柱狀圖, 每根柱子的顏色為紫羅蘭色
p2 = plt.bar(index, values, width, label="num", color="#87CEFA")
# 設置橫軸標簽
plt.xlabel('clusters')
# 設置縱軸標簽
plt.ylabel('number of reviews')
# 添加標題
plt.title('Cluster Distribution')
# 添加縱橫軸的刻度
plt.xticks(index, ('mentioned1cluster', 'mentioned2cluster', 'mentioned3cluster', 'mentioned4cluster', 'mentioned5cluster', 'mentioned6cluster', 'mentioned7cluster', 'mentioned8cluster', 'mentioned9cluster', 'mentioned10cluster'))
# plt.yticks(np.arange(0, 10000, 10))
# 添加圖例
plt.legend(loc="upper right")
plt.show()
4. 餅圖
可以使用 pyplot 中的 pie() 方法來繪制餅圖。
pie() 方法語法格式如下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
參數說明:
- x:浮點型數組或列表,用于繪制餅圖的數據,表示每個扇形的面積。
- explode:數組,表示各個扇形之間的間隔,默認值為0。
- labels:列表,各個扇形的標簽,默認值為 None。
- colors:數組,表示各個扇形的顏色,默認值為 None。
- autopct:設置餅圖內各個扇形百分比顯示格式,%d%% 整數百分比,%0.1f 一位小數, %0.1f%% 一位小數百分比, %0.2f%% 兩位小數百分比。
- labeldistance:標簽標記的繪制位置,相對于半徑的比例,默認值為 1.1,如 <1則繪制在餅圖內側。
- pctdistance::類似于 labeldistance,指定 autopct 的位置刻度,默認值為 0.6。
- shadow::布爾值 True 或 False,設置餅圖的陰影,默認為 False,不設置陰影。
- radius::設置餅圖的半徑,默認為 1。
- startangle::用于指定餅圖的起始角度,默認為從 x 軸正方向逆時針畫起,如設定 =90 則從 y 軸正方向畫起。
- counterclock:布爾值,用于指定是否逆時針繪制扇形,默認為 True,即逆時針繪制,False 為順時針。
- wedgeprops:字典類型,默認值 None。用于指定扇形的屬性,比如邊框線顏色、邊框線寬度等。例如:wedgeprops={‘linewidth’:5} 設置 wedge 線寬為5。
- textprops:字典類型,用于指定文本標簽的屬性,比如字體大小、字體顏色等,默認值為 None。
- center:浮點類型的列表,用于指定餅圖的中心位置,默認值:(0,0)。
- frame:布爾類型,用于指定是否繪制餅圖的邊框,默認值:False。如果是 True,繪制帶有表的軸框架。
- rotatelabels:布爾類型,用于指定是否旋轉文本標簽,默認為 False。如果為 True,旋轉每個 label 到指定的角度。
- data:用于指定數據。如果設置了 data 參數,則可以直接使用數據框中的列作為 x、labels 等參數的值,無需再次傳遞。
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm # 字體管理器
# 準備字體
my_font = fm.FontProperties(fname="C:\Windows\Fonts\simkai.ttf")
# 準備數據
data = [0.16881, 0.14966, 0.07471, 0.06992, 0.04762, 0.03541, 0.02925, 0.02411, 0.02316, 0.01409, 0.36326]
# 準備標簽
labels = ['Java', 'C', 'C++', 'Python', 'Visual Basic.NET', 'C#', 'PHP', 'JavaScript', 'SQL', 'Assembly langugage','其他']
# 將排列在第4位的語言(Python)分離出來
explode = [0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, 0]
# 使用自定義顏色
colors = ['red', 'pink', 'magenta', 'purple', 'orange']
# 將橫、縱坐標軸標準化處理,保證餅圖是一個正圓,否則為橢圓
plt.axes(aspect='equal')
# 控制X軸和Y軸的范圍(用于控制餅圖的圓心、半徑)
plt.xlim(0, 8)
plt.ylim(0, 8)
# 不顯示邊框
plt.gca().spines['right'].set_color('none')
plt.gca().spines['top'].set_color('none')
plt.gca().spines['left'].set_color('none')
plt.gca().spines['bottom'].set_color('none')
# 繪制餅圖
plt.pie(x=data, # 繪制數據labels=labels, # 添加編程語言標簽explode=explode, # 突出顯示Pythoncolors=colors, # 設置自定義填充色autopct='%.3f%%', # 設置百分比的格式,保留3位小數pctdistance=0.8, # 設置百分比標簽和圓心的距離labeldistance=1.0, # 設置標簽和圓心的距離startangle=180, # 設置餅圖的初始角度center=(4, 4), # 設置餅圖的圓心(相當于X軸和Y軸的范圍)radius=3.8, # 設置餅圖的半徑(相當于X軸和Y軸的范圍)counterclock=False, # 是否為逆時針方向,False表示順時針方向wedgeprops={'linewidth': 1, 'edgecolor': 'green'}, # 設置餅圖內外邊界的屬性值textprops={'fontsize': 12, 'color': 'black','fontproperties':my_font}, # 設置文本標簽的屬性值frame=1) # 是否顯示餅圖的圓圈,1為顯示
# 不顯示X軸、Y軸的刻度值
plt.xticks(())
plt.yticks(())
# 添加圖形標題
plt.title('2018年8月的編程語言指數排行榜',fontproperties=my_font)
# 顯示圖形
plt.show()
5. 直方圖
可以使用 pyplot 中的 hist() 方法來繪制直方圖。
hist() 方法是 Matplotlib 庫中的 pyplot 子庫中的一種用于繪制直方圖的函數。
hist() 方法可以用于可視化數據的分布情況,例如觀察數據的中心趨勢、偏態和異常值等。
hist() 方法語法格式如下:
matplotlib.pyplot.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, **kwargs)
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
x=np.random.normal(size=1000)
plt.hist(x,bins=10) #bins參數設置分桶數目
plt.show()
5. 中文顯示
Matplotlib 中文顯示不是特別友好,要在 Matplotlib 中顯示中文,我們可以通過兩個方法:
- 設置 Matplotlib 的字體參數。
- 下載使用支持中文的字體庫。
在未設置字體,默認情況顯示如下,中文部分不能正常顯示: