天天看點

Python Matplotlib繪圖

  1. Matplotlib安裝

    cmd輸入:pip install Matplotlib

    點我進入Matplotlib官網

  1. 畫布(fig)與子圖(ax)

    需要導入:

    form matplotlib import pyplt as plt

plt.figure(figsize,dpi)

建立畫布

plt.figure(屬性)
figsize = (widtht,hight) 設定畫布寬度和高度
dpi 畫布透明度

plt.subplot(x y index)

建立子圖

plt.subplot(屬性)
x 行數
y 列數
index 索引(從1開始,從左往右,從上往下)

plt.subplots(nrows, ncols, sharex = False, sharey = False)

建立畫布和子圖

傳回值:fig,ax

plt.subplots(屬性)
nrows 子圖的行數
ncols 子圖的列數
sharex 所有子圖使用相同的x軸刻度
sharey 所有子圖使用相同的y軸刻度
通用方法
plt.figure(figsize=None,dpi=None) 生成新的畫布,figsize:畫布大小(傳參:元組),dpi:透明度
plt.savefig(fname) 儲存圖檔,fname:儲存圖檔位置
plt.xticks(ticks=None,lables=None) ticks:設定x軸刻度的值,labels:刻度标簽
plt.yticks(ticks=None,lables=None) ticks:設定y軸刻度的值,labels:刻度标簽
plt.xlabel(xlabel) 設定x軸标簽
plt.ylabel(ylabel) 設定y軸标簽
plt.title() 設定圖示題
plt.grid() 根據x軸和y軸的數值展示軸網格
plt.legend(prop) 顯示圖例标簽,prop:局部字型設定
plt.annotate(text,xy,xytext,arrowprops = {}) 資料标簽,text:文本标簽,xy:标點位置(元組),xytext:文本位置(元組),arrowprops:箭頭設定
plt.show() 釋放空間,并顯示已繪制的圖
plt.subplots_adjust(wspace,hspace) 調整子圖之間的間距,wspace(左右間距),hspace(上下間距)

zip() 函數

作用:用于生成坐标

zip(x,y)

生成坐标(x,y必須數量一緻)

zip(屬性)
x x軸上的位置
y y軸上的位置
  1. 中文顯示問題

    解決方法:

方法一:

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)
           

方法二:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步驟一(替換sans-serif字型)
plt.rcParams['axes.unicode_minus'] = False   # 步驟二(解決坐标軸負數的負号顯示問題)
           

方法三:

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties 
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
x = [1,2,3,4]
y = [3,2,1,3]
plt.plot(x,y)
plt.xlabel("x軸标簽",fontproperties=font)
plt.show()
           
  1. 折線圖

    折線圖以折線的上升或下降來表示統計數量的增減變化的統計圖

    特點:能夠顯示資料的變化趨勢,反映事物的變化情況

    折線圖可以通過plt.plot()函數來繪制

plt.plot(x,y,color,linestyle,marker,label)

構件折線圖

(x,y元素必須一緻)

plt.plot(屬性)
x 在x軸上的點
y 在y軸上的點
color 設定線的顔色
linestyle 設定線的樣式
marker 标記樣式
label 圖例标簽
  1. 散點圖

    散點圖用兩組資料構成多個坐标點,考察坐标點的分布,判斷兩變量之間是否存在某種關聯或總結坐标點的分布模式

    特點:判斷變量之間是否存在數量關聯趨勢,表示離群點(分布規律)

    散點圖通過plt.scatter() 函數

plt.scatter(x,y)

來構件散點圖

plt.scatter(屬性)
x 在x軸上的點
y 在y軸上的點
  1. 柱狀圖及條形圖

    條形圖是用寬度相同的條形的高度或長短來表示資料多少的圖形。條形圖可以橫置或縱置,縱置時也稱為柱形圖。

    特點:1.能夠使人們一眼看出各個資料的大小。

            2.易于比較資料之間的差别。

    通過 plt.bar() 方法繪制柱狀圖, plt.barh() 方法繪制條形圖

plt.bar(x,height,width = 0.8,bottom,align = "center")

建構 柱狀圖

plt.bar(屬性)
x 在x軸上的位置
height 在y軸上的高度
width = 0.8 柱子的寬度
bottom = “None” 柱子底部的起始位置
align = “center” 校準位置

plt.barh(y,width,height = 0.8,align = "center")

建構 條形圖

bar.barh(屬性)
y 在x軸上的長度
width 在y軸上的位置
height 柱子的寬度
align = “center” 校準位置
  1. 直方圖

    直方圖由一系列高度不等的縱向條紋或線段表示資料分布的情況,一般用橫軸表示資料範圍,縱軸表示分布情況

    特點:繪制連續性的資料,展示一組或者多組資料的分布情況(統計)

    通過 plt.hist() 方法繪制

plt.hist(x,bins = None,density =False)

建構圖形

plt.hist(屬性)
x 在x軸上的位置
bins = None 組數(預設為10)
density = False 頻率(預設為頻數)
  1. 扇形圖

    扇形圖,用整個圓表示總數,用圓内各個扇形的大小表示各部分數量占總數的百分數。

    通過 plt.pie() 方法繪制

plt.pie(x, explode=None, labels=None,autopct=None,shadow=False)

建構圖形

plt.pie(屬性)
x 扇形資料
explode = None 設定某幾個分塊是否要分離餅圖
labels = None 每塊扇形标簽
autopct = None 百分比資料标簽
shadow = False 是否顯示陰影
plt.pie傳回值
patchs 繪制餅圖每塊對象
texts 文本清單
autotexts 百分比的文本清單
  1. 箱型圖

    箱線圖是一種直覺簡潔的方式去呈現一組資料的分布。 箱線圖廣泛用于各個資料分析領域,它能非常簡單明了地顯示一組資料中5個重要數值,并且還能發現一組資料中的存在的異常值。

五個重要數值
最大值 最小值 中位數 下四分位數 上四分位數

通過 plt.boxplot() 方法繪制

ply.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,labels=None,meanline=None,showmeans=None)

建構圖形

plt.boxplot(屬性)
x 需要繪制的箱型圖的資料
notch = None 是否展示置信區間 預設為False
sym = None 代表異常點的符号表示 預設為圓點
vert = None 是否是垂直的 預設是True
whis = None 上下限系數 預設為1.5
positions = None 設定每個盒子的位置
widths = None 設定每個盒子的寬度
labels = None 每個盒子的label
meanline和showmean 都為True的時候 會展示平均線
  1. 雷達圖

    雷達圖(Radar Chart)又被叫做蜘蛛網圖,适用于顯示三個或更多的次元的變量的強弱情況。比如某個企業在哪些業務方面的投入等,都可以用雷達圖友善的表示。

用過 plt.polar() 來繪制

plt.polar(theta,r)

來建構圖形

plt.polar
theta 分割區塊
r 資料

(區塊和資料個數必須相等)

  1. Axes (子畫)

    Axes容器是用來建立具體的圖形的。比如畫曲線,柱狀圖,都是畫在上面。是以之前我們學的使用plt.xx繪制各種圖形(比如條形圖,直方圖,散點圖等)都是對Axes的封裝

方法
axes.set_xlim(min,max) 限制x軸的範圍
axes.set_ylim(min,max) 限制y軸的範圍
axes.text(x,y,text) 在坐标位置标注文本
axes.set_xlabel(text) 設定x軸文本标簽
axes.set_ylabel(text) 設定y軸文本标簽
axes.twinx() 共享x軸
axes.twiny() 共享y軸
axes.minorticks_on() 顯示x與y軸的子刻度
  1. Axis(軸)

    Axis代表的是x軸或者y軸的對象。包含Tick(刻度)對象,TickLabel刻度文本對象,以及AxisLabel坐标軸文本對象。axis對象有一些方法可以操作刻度和文本等。

axis: xaxis,yaxis

方法
axes.axis.set_label_coords(x,y) 設定x或y軸的文本标簽位置

自定義刻度格式

from matplotlib import ticker

formatter = ticker.FormatStrFormatter("自定義格式")

ax1.yaxis.set_major_formatter(formatter)
           
  1. 多圖布局

調整子圖間距

fig.tight_layout(h_pad=None,v_pad=None)

(不傳參,預設自動調整)

fig.tight_layout(屬性)
h_pad 上下間距
v_pad 左右間距

自定義布局

方法一:

from matplotlib import pyplot as plt
plt.figure()
plt.subplot(221)
plt.subplot(223)
plt.subplot(122)
           
Python Matplotlib繪圖

方法二:

fig.add_gridspec(nrows=1, ncols=1,width_ratios,height_ratios)

建立栅欄模式

fig.add_gridspec(屬性)
nrows
nclos
width_ratios 寬的比值
height_ratios 高的比值
from matplotlib import pyplot as plt
fig = plt.figure()
gs = fig.add_gridspec(2,2)
fig.add_subplot(gs[0,:])
fig.add_subplot(gs[1,0])
fig.add_subplot(gs[1,1])
           
Python Matplotlib繪圖