matplotlib基本繪圖API集錦

一、基本使用流程

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
)

image-20200620160937044

2.設置座標軸刻度、標籤、標題
plt.xticks(
    x,                        # 刻度,指定在哪些位置有標籤
    x_ticks_label,            # 刻度標籤,shape 與刻度一致
    rotation                  # 刻度標籤旋轉角度
)
plt.xlabel('x_axle')

image-20200620165348091

3.設置座標軸顯示範圍
plt.xlim([4, 8])            # 兩邊都設置
plt.xlim(xmin=4)			# 只設置左邊
plt.xlim(xmax=4)			# 只設置右邊

image-20200620161645409

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' 表示移動到交叉軸的指定座標

image-20200620164701852

5.設置網格
plt.grid(
    b=None,						# 是否顯示網格線
    axis='both',				# 方向軸
    linestyle='-.',           	# 網格線樣式
    linewidth=2,				# 線寬
    alpha=.4,                 	# 透明度
    color='red'               	# 顏色 
)

image-20200620163220997

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'		# 圖例位置
)

image-20200620163722989

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
)

image-20200620170210731

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)

image-20200620163905962

10.任意位置添加文字
plt.text(
    x,  							# 橫座標
    y, 								# 縱座標
    text, 							# 內容
    c,								# 顏色
    size,							# 字體大小
    ha='center', 					# 對齊方式
    fontproperties=my_font			# 字體
)

image-20200620173941428

三、基本圖形繪製

1.折線圖
plt.plot(
        x,                     # 橫座標
        y,                     # 縱座標
        color='r',             # 折線顏色
        alpha=0.5,             # 折線透明度
        linestyle='--',        # 折線的樣式,-./
        linewidth=3,           # 折線寬度
        marker='o'             # 折點樣式,*/+/x/s/v/h/H
)

image-20200620171632597

2.散點圖
plt.scatter(
    x, 
    y, 
    c='r', 
    marker='s', 
    alpha=.5, 
    label='test'
)

image-20200620172212989

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 把它頂起來

image-20200620175736570

4.直方圖

直方圖帶有統計功能,它會統計落在每一個區間內的樣本數量,然後繪製矩形,所以輸入需要是一個樣本集合

plt.hist(
	x,			# 數據樣本集合
	bins		# 區間的數量,它會根據這個參數、以及數據的最大最小值自動計算每一個區間的上下界
)

# 區間數量的計算方式:最大樣本值減去最小樣本值,除以區間寬度,最後取整
bins = int((max(x)-min(x))/region_width)

image-20200620182704564

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)

image-20200620185205119

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章