目錄
- 使用matplotlib作圖
- 注意事項:
- 1. 創建畫布與創建子圖
- 2. 添加畫布內容
- 3. 設定pyplot的動態rc引數
- 3.1 線條常用的rc引數
- 3.2 常用線條型別
- 4. 圖形繪制
- 4.1 散點圖
- 4.2 繪制折線圖
- 5. 分析特征內部資料分布與分散狀況
- 5.1 繪制直方圖
- 5.2 繪制條形圖
- 5.3創建餅圖
- 5.4 繪制箱形圖
- 5.5 雷達圖
使用matplotlib作圖
注意事項:
- 由于默認的pyplot字體并不支持中文字符的顯示,因此需要通過甚至font.sans-serif引數來改變繪圖時的字體,使得圖形可以正常顯示中文,同時用于更改字體后,會導致坐標軸中歐給的部分字符無法顯示,因此需要同時更改axes.unicode.minus引數
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
- 設定繪圖風格
使用matplotlib繪圖時,可以設定系統預先設定好的繪圖風格
使用:plt.style.available陳述句可以查看系統中可以使用的所有繪圖風格
預設風格的使用:plt.style.use(“ggplot”)
1. 創建畫布與創建子圖
構建出一張空白畫布,并可以選擇是否將整個畫布劃分為多個部分,方便在同一幅畫上繪制多個圖形的情況,
| 函式名稱 | 函式作用 |
|---|---|
| plt.figure | 創建一個空白畫布,可以指定畫布的大小、像素 |
| figure.add_subplot | 創建并選中子圖,可以指定子圖的行數,列數,與選中圖片的編號 |
- figure函式:matplotlib.pyplot.figure()
1.matplotlib繪制的影像均位于figure物件中
2.引數figsize用于設定影像的大小和縱橫比 - subplot函式:plt.subplot(a,b,c)
1.a、b表示將圖片視窗分割為ab的區域,即:行列
2. c表示當前選中要操作的區域
2. 添加畫布內容
第二部分是繪圖的主體部分,其中添加標題、坐標軸名稱、繪制圖形等步驟是并列的,沒有先后順序,可以先繪制圖形,也可以先添加各種標簽,
| 函式名稱 | 函式作用 |
|---|---|
| plt.title | 在當前圖形中添加標題,可以指定標題的名稱、位置、顏色、字體等引數 |
| plt.xlable | 在當前圖形中添加x軸的名字,可以指定位置、顏色、字體等引數 |
| plt.ylable | 在當前圖形中添加y軸的名字,可以指定位置、顏色、字體等引數 |
| plt.xlim | 指定當前x軸的范圍,只能確定一個數值區間,而無法使用字串標識 |
| plt.ylim | 指定當前y軸的范圍,只能確定一個數值區間,而無法使用字串標識 |
| plt.xticks | 指定x軸刻度的數目和取值 |
| plt.yticks | 指定y軸刻度的數目和取值 |
| plt.legend | 指定當前圖形的圖例,可以指定當前圖例的大小、位置和標簽 |
3. 設定pyplot的動態rc引數
pyplot使用rc組態檔來自定義圖形的各種默認屬性,被稱為rc配置或rc引數,在pyplot中幾乎所有的默認屬性均可以控制,例如視圖視窗的大小、線條寬度、顏色、樣式,坐標軸、網格屬性、文本、字體等,
3.1 線條常用的rc引數
| rc引數名稱 | 解釋 | 取值 |
|---|---|---|
| lines.linewidth | 線條寬度 | 取0-10之間的取值,默認為1.5 |
| lines.linestyle | 線條樣式 | 可取"-"、"–"、"."、":“四種,默認為”-" |
| lines.marker | 線條上點的形狀 | 可取"o"、“D”、“h”、"."、","、“S”等20多種,默認為None |
| lines.markersize | 點的大小 | 取0-10之間的數值,默認為1 |
3.2 常用線條型別
| linestyle取值 | 意義 | linestyle取值 | 意義 |
|---|---|---|---|
| - | 實線 | -. | 點線 |
| – | 長虛線 | : | 短虛線 |
4. 圖形繪制
4.1 散點圖
散點圖又稱散點分布圖,是以一個特征為橫坐標,另一個特征為縱坐標,利用坐標點的分布形態反映特征間統計關系的一種圖形,
值是由點在圖表中的不同位置表示,類別是由圖表中的不同標記表示,通常用來比較跨類別的資料,
- scatter函式:matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None,**kwargs),常用引數即說明如下:
| 引數名稱 | 說明 |
|---|---|
| x,y | 接收array,表示x軸和y軸的對應資料,無默認, |
| s | 接收數值或一維的array,指定點的大小,若傳入一維array則表示每個點的大小,默認為None |
| c | 接收數值或一維的array,指定點的顏色,若傳入一維array則表示每個點的顏色,默認為None |
| marker | 接收特定string,表示繪制的點的型別,默認為None |
| alpha | 接收0-1的小時,表示點的透明度,默認為None |
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
data1 = pd.DataFrame({"姓名":["韓梅梅","李雷","Lucy","Lily","Jim","小明","Amy"],
"身高":[160,170,163,165,178,182,168],
"體重":[48,55,52,50,60,58,49]})
#繪制散點圖查看身高和體重之間的關系
figure = plt.figure(figsize=(6,5))
plt.scatter(data1["身高"],data1["體重"],color="b",marker="s")
plt.xlabel("height(cm)")
plt.ylabel("weight(kg)")
plt.title("身高體重關系圖")

4.2 繪制折線圖
折線圖是一種將資料點按照順序連接起來的圖形,可以看作是將散點圖,按照x軸坐標順序連接起來的圖形,折線圖的主要功能是查看因變數y隨著自變數x改變的趨勢,最適合用于隨時間(根據常用比例設定)而變化的連續資料,同時還可以看出數量的差異,增長趨勢的變化,
- plot函式:
matplotlib.pyplot.plot(*args,**kwargs)
常用引數及說明如下表所示:
| 引數名稱 | 說明 |
|---|---|
| x、y | 接收array,表示x軸和y軸對應的資料,無默認 |
| color | 接收特定string,指定線條的顏色,默認為None |
| linestyle | 接收特定string,指定線條型別,默認為“-” |
| marker | 接收特定string,表示繪制的點的型別,默認為None |
| alpha | 接收0-1的小數,表示點的透明度,默認為None, |
data_x = list(range(1,1000))
data_y = [10]
for i in range(998):
data_y.append(data_y[i]+np.random.randint(-1,2))
plt.plot(data_x,data_y)

5. 分析特征內部資料分布與分散狀況
5.1 繪制直方圖
直方圖是統計報告圖的一種,一般用于表示連續型資料的分布情況,一般用橫軸表示資料分組,縱軸表示屬于該組取值范圍的樣本數量或者占比,
用直方圖可以比較直觀的看出產品質量特性的分布狀態,便于判斷其總體質量分布情況,直方圖可以發現分布表無法發現的資料模式、樣本的頻率分布和總體的分布,
- hist函式:matplotlib.pyplot.hist(x,y)
其中:
x:待繪制直方圖的一維陣列
y:可以是整數,表示均勻分為n組,也可以是
#正態分布資料
import random
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
mu,sigma = 100,15
x = mu+sigma*np.random.randn(10000)
#the histgram of data
n,bins,pathces = plt.hist(x,50,density=0,facecolor="g",alpha=0.75)
plt.title("Histogram of IQ")
plt.xlabel("Smart")
plt.ylabel("頻數")
plt.text(60,500,r"$\mu=100,\ \sigma=15$")
plt.axis=([40,160,0,600])
plt.grid(True)

注意:plt.hist()函式中的density引數是布爾型別,默認為None,當其值為False時,y軸表示頻數,當其值為True時,y軸表示頻率
5.2 繪制條形圖
條形圖是統計報告圖的一種,由一系列高低不等的縱向條紋或線段表示類別型資料分布情況,一般用橫軸表類別,縱軸表示該樣本數量或占比,
用條形圖可以比較直觀的看出產品質量特性的分布狀態,便于判斷其總體質量情況,
- bar()函式:plt.bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)
- 常用引數說明:
| 引數名稱 | 說明 |
|---|---|
| left | 接收array,表示x軸資料,無默認 |
| height | 接收array,表示x軸所代表資料的數量,無默認 |
| width | 接收0-1之間的float,指定條形圖的寬度,默認為0.8 |
| color | 接收特定string或者包含顏色字串的array,表示條形圖的顏色,默認為None |
grades = ["高一","高二","高三"]
values = [879,517,725]
plt.bar(grades,values,color="b",width=.4)
plt.title("全校人數")
- 組合圖示例:
year = ["2017","2018","2019","2020"]
sales = np.random.rand(4)*1000000
conv = np.random.rand(4)
fig,ax = plt.subplots(figsize=(12,8))
ax1 = ax.twinx()#創建次坐標軸
ax.bar(year,sales,color="skyblue")
ax1.plot(year,conv,"-o",color = "y")

5.3創建餅圖
餅圖是將各項的大小與各項的比例顯示在一張圖中,以每一部分的大小來確定每一項的占比,
餅圖可以比較清楚的反映出部分與部分、部分與整體之間的比例關系,易于顯示每組資料相對于整體資料的大小,且比較直觀,
- pie()函式:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, …)

# 頻次或頻率
data = [1, 2, 3, 4, 5] # 各類別占比
# 各類別標簽
label = ['貓', '狗', '牛', '羊', '馬']
# 每個類別要繪制的顏色
color = ['lightblue', 'lightgreen', 'lightyellow', 'pink', 'orange'] # 各類別顏色
explode = (0, 0, 0, 0, 0.1) # 各類別的偏移半徑
plt.pie(data,colors = color,labels=label,shadow=True,autopct="%.2f%%",explode=explode)

5.4 繪制箱形圖
箱形圖,能夠提供有關資料位置和分散情況的關鍵資訊,尤其是在比較常用的統計量,能提供有關資料位置和分散情況的關鍵性心,尤其是在表不同特征時,更加可以表現其分散程度的差異,
箱形圖使用的5個統計量,分別是:最小值、下四分位數、中位數、上四分位數和最大值,它可以粗略的看出資料時候具有對稱性、分布的分散程度等資訊,特別可以用于對幾個樣本的比較,
- boxplot函式
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, …)
常用引數:

5.5 雷達圖
雷達圖適用于顯示三個或更多的維度的變數,雷達圖是以在同一點開始的軸上顯示三個或者更多個變數的而為圖表的形式來顯示多元資料的方法,其中軸的相對位置和角度通常是無意義的,
雷達圖對于查看哪些變數具有相似的值、變數之間是否有例外值都很用,雷達圖也可以用于查看哪些變數在資料集內得分較高或較低,因此非常適合顯示性能相關資料,常用于排名、評估、評論等資料的展示,
fig = plt.figure(figsize=(10,5))
# 玩家資料(0-10分)
data4 = np.array([[3.2, 1.7, 1.9, 2.5, 8.0],
[8.2, 6.9, 5.4, 1.7, 3.6],
[5.2, 4.2, 8.7, 0.5, 1.7],
[7.4, 5.4, 4.1, 3.5, 6.2]])
n,k = data4.shape#獲取陣列的行列資訊
# 各維度名稱
names = ['打錢速度', '擊殺助攻', '輸出能力', '控制時長', '吸收傷害']
ax = fig.add_subplot(111,polar=True)#設定極坐標
angles = np.linspace(0,2*np.pi,k,endpoint=False)#創建等引數列繪制周長
angles = np.concatenate((angles,[angles[0]]))#使周長閉合,即在數列的最后增加一個數字,該數字為數列開始的數字
Linestyle = ['bo-', 'ro:', 'gD--', 'yv-.'] # 點線形狀
Fillcolor = ['b', 'r', 'g', 'y'] # 填充顏色\點線顏色
for i in range(n):
data = np.concatenate((data4[i],[data4[i][0]]))#每一組資料都讓其閉合,形成一個封閉的圖形
data = data4[i]
ax.plot(angles,data,Linestyle[i],linewidth = 2)
ax.fill(angles,data,facecolor=Fillcolor[i],alpha=0.25)
ax.set_thetagrids(angles[:-1] * 180/np.pi, names) # 顯示類別名字
ax.set_title("玩家能力值對比圖", va='bottom') # 設定標題
ax.set_rlim(0, 11) # 設定各指標的最終范圍
ax.grid(True) # 顯示網格

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/100808.html
標籤:其他
