一、基本使用流程
import matplotlib.pyplot as plt # 導入模塊
# 畫布設置
plt.figure(figsize=(12,9)) # 設置圖像尺寸大小,參數值乘以100表示分辨率
plt.subplot(m,n,j) # 多個圖排列
plt.figure().tight_layout() # 多個圖排列時自動設置間距,消除重疊
# 畫圖
plt.plot(x, y)
# 圖形設置
plt.xlabel( 'height') # 設置X軸標題
plt.ylabel( 'weight ') # 設置Y軸標題
plt.title('scatter demo') # 添加圖的標題
# 保存與顯示
plt.savefig(savepath) # 保存圖像,圖像如果不完整,需要添加參數 bbox_inches = 'tight'
plt.show() # 顯示圖像,執行該語句之後會釋放 figure 資源,如果要保存圖片必須將 save 放在 show 之前,否則只能保存空白
二、常見設置
1.設置畫布尺寸
plt.figure(
figsize=(30, 5), # 畫布大小,指定畫布的寬和高,單位爲英寸
dpi=80 # 指定繪圖對象的分辨率,即每英寸對少個像素,默認爲80
)
2.設置座標軸刻度、標籤、標題
plt.xticks(
x, # 刻度,指定在哪些位置有標籤
x_ticks_label, # 刻度標籤,shape 與刻度一致
rotation # 刻度標籤旋轉角度
)
plt.xlabel('x_axle')
3.設置座標軸顯示範圍
plt.xlim([4, 8]) # 兩邊都設置
plt.xlim(xmin=4) # 只設置左邊
plt.xlim(xmax=4) # 只設置右邊
4.設置座標軸顯示方式
ax = plt.gca()
ax.spines['right'].set_color('none') # 隱藏右邊線
ax.spines['top'].set_color('none') # 隱藏上邊線
ax.spines['left'].set_color('b') # 左邊線顏色爲藍色
ax.spines['bottom'].set_color('y') # 下邊線顏色爲黃色
ax.spines['left'].set_position(('data', 6)) # 移動左邊線,'data' 表示移動到交叉軸的指定座標
5.設置網格
plt.grid(
b=None, # 是否顯示網格線
axis='both', # 方向軸
linestyle='-.', # 網格線樣式
linewidth=2, # 線寬
alpha=.4, # 透明度
color='red' # 顏色
)
6.設置圖例
圖例在一圖多線中使用,並且要在劃線 plt.plot 中設置 label 參數。
plt.plot(x, y, c='r', label='line1')
plt.plot(x, y**2, c='b', label='line2')
plt.legend(
prop, # 圖例字體
loc='upper right' # 圖例位置
)
7.設置顯示中文(局部)
一般用來設置中文的屬性都是 fontproperties
,除了圖例用的是 prop
,這個在上面說到過!
from matplotlib import font_manager
# 設置字體,這個字體文件必須支持中文
my_font = font_manager.FontProperties(fname='/path/to/font_file.ttc', size=18)
# 座標軸顯示中文
plt.xlabel(
x_title, # 座標軸標題內容
fontproperties=my_font # 字體設置
)
# 圖形標題顯示中文
plt.title(
title,
fontproperties=my_font
)
8.設置中文顯示(全局)
plt.rcParams['font.sans-serif'] = ['FangSong']
'''
常用字體:
- 黑體 SimHei
- 微軟雅黑 Microsoft YaHei
- 微軟正黑體 Microsoft JhengHei
- 新宋體 NSimSun
- 新細明體 PMingLiU
- 細明體 MingLiU
- 標楷體 DFKai-SB
- 仿宋 FangSong
- 楷體 KaiTi
- 仿宋_GB2312 FangSong_GB2312
- 楷體_GB2312 KaiTi_GB2312
'''
9.創建多個子圖
fig = plt.figure(num=1, figsize=(10,10))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
10.任意位置添加文字
plt.text(
x, # 橫座標
y, # 縱座標
text, # 內容
c, # 顏色
size, # 字體大小
ha='center', # 對齊方式
fontproperties=my_font # 字體
)
三、基本圖形繪製
1.折線圖
plt.plot(
x, # 橫座標
y, # 縱座標
color='r', # 折線顏色
alpha=0.5, # 折線透明度
linestyle='--', # 折線的樣式,-./
linewidth=3, # 折線寬度
marker='o' # 折點樣式,*/+/x/s/v/h/H
)
2.散點圖
plt.scatter(
x,
y,
c='r',
marker='s',
alpha=.5,
label='test'
)
3.條形圖
條形圖繪製時會返回所有繪製的矩形框,這些矩形框也是一個個的對象!
# 垂直條形圖
rects = ax1.bar(x, y, color='r', width=0.3, alpha=.5)
for rect in rects:
print(rect.get_x(), rect.get_y())
print(rect.get_width(), rect.get_height())
# 水平條形圖
ax2.barh(x, y, color='r', height=0.3, alpha=.5) # 這裏條形寬度其實是高度 height
# 並列條形圖
ax3.bar(x, y, color='r', width=0.3, alpha=.5)
ax3.bar(x+0.3, y-1, color='b', width=0.3, alpha=.5) # 這裏 x 偏移與寬度一致
# 羅列條形圖
ax4.bar(x, y, width=0.3, alpha=.5) # 先畫下面的
ax4.bar(x, y-1, bottom=y, color='r', width=0.3, alpha=.5) # 再畫上面的,用 bottom 把它頂起來
4.直方圖
直方圖帶有統計功能,它會統計落在每一個區間內的樣本數量,然後繪製矩形,所以輸入需要是一個樣本集合
plt.hist(
x, # 數據樣本集合
bins # 區間的數量,它會根據這個參數、以及數據的最大最小值自動計算每一個區間的上下界
)
# 區間數量的計算方式:最大樣本值減去最小樣本值,除以區間寬度,最後取整
bins = int((max(x)-min(x))/region_width)
5.餅狀圖
size = [59, 20, 21] # 每一部分佔比
clolor = ['r', 'g', 'b'] # 每一部分顏色
explode = [0, 0.1, 0] # 每一部分凸出比例
label_list = ['梅西', 'C羅', '內馬爾'] # 每一部分標籤
# 繪製餅狀圖
patches, l_text, p_text = plt.pie(
size,
explode=explode, # 凸出
colors=clolor, # 顏色
labels=label_list, # 標籤
labeldistance=1.4, # 各部分標籤距離圓心距離,按照半徑的倍數計算
pctdistance=0.7, # 圓內各扇形文本距離圓心距離,按照半徑的倍數計算
autopct='%.1f%%', # 圓內各扇形文本顯示格式,就是半分比
shadow=True, # 圓內各扇形邊界陰影
startangle=90, # 第一個扇形的起始角度,從第一象限逆時針開始計算
)
# 重新繪製扇形顏色
for t in patches:
t.set_color('pink')
break
# 繪製標籤
for t in l_text:
t.set_fontproperties(my_font)
# 繪製扇形內文本(百分比標籤)
for t in p_text:
t.set_size(15)
# 繪製圖例
plt.legend(prop=my_font)