溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python的matplotlib常用繪圖函數(shù)有哪些

發(fā)布時間:2021-01-25 12:59:24 來源:億速云 閱讀:353 作者:小新 欄目:編程語言

這篇文章主要介紹python的matplotlib常用繪圖函數(shù)有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

matplotlib具有強(qiáng)大的繪圖功能,但是語句瑣碎,每次使用都需要一句一句書寫未免太過麻煩。本文根據(jù)平時繪圖經(jīng)驗(yàn)總結(jié)了常用繪圖函數(shù),可以直接使用,非常方便

import matplotlib.pyplot as pltimport pandas as pdimport numpy as np
plt.rcParams['font.sans-serif']=['simhei']#用于正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#用于正常顯示負(fù)號

1、利用含有多列數(shù)據(jù)的DataFrame表格繪圖

def plot_cols(data,xlabel=None,ylabel=None,path_file=None,marker=True,len_xticks=10,save=False):
    """
    :param data:DataFrame,數(shù)據(jù)表格--行標(biāo)題為橫坐標(biāo),列標(biāo)題為數(shù)據(jù)列
                Series,序列——行標(biāo)題為橫坐標(biāo),name為數(shù)據(jù)列
    :param xlabel: str,橫坐標(biāo)名稱
    :param ylabel: str,縱坐標(biāo)名稱
    :param path_file: str,保存文件路徑
    :param marker: bool,是否為每條線添加不同的標(biāo)記
    :param len_xticks:int,橫坐標(biāo)顯示的值個數(shù)
    :param save: bool,是否保存圖片
    example:
        data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])
        plot_cols(data,xlabel='指標(biāo)',ylabel='指數(shù)')
    """
    data.index=data.index.astype(str)
    plt.figure(figsize=(12,8))
    markers=['.',',','o','v','^','<','>','1','2','3','4','s','p','*','h','H','+','x','D','d','|','_']#標(biāo)記符號

    #如果是DataFrame表格形式,則畫出多列;如果是Series,則畫出單列
    if type(data) is pd.core.frame.DataFrame:
        #是否為每條線添加不同的符號
        if marker==False:
            for col in data.columns:
                plt.plot(data[col],marker='o',label=col)
        else:
            for col,marker_ in zip(data.columns,markers):
                plt.plot(data[col], marker=marker_, label=col)

    elif type(data) is pd.core.series.Series:
        plt.plot(data, marker='o', label=data.name)

    plt.legend(loc='best',fontsize='small')
    xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被顯示的橫坐標(biāo)刻度值的位置
    plt.xticks(data.index[xticks],rotation=270)
    plt.ylabel(ylabel,fontsize=15)
    plt.xlabel(xlabel,fontsize=15)
    plt.grid(True,alpha=0.2)
    if save==True:plt.savefig(path_file)if __name__=='__main__':
    x=np.arange(1,101)
    data = pd.DataFrame({'a':x*2+3,'b':x*3-4,'c':np.log(x)+9}, index=np.arange(100))
    plot_cols(data, xlabel='指標(biāo)', ylabel='指數(shù)')

python的matplotlib常用繪圖函數(shù)有哪些

2、將含有兩列的DataFrame表格數(shù)據(jù)作為雙軸圖

def plot_twins(data,col1,col2,xlabel=None,ylabel1=None,ylabel2=None,len_xticks=10,figsize=(10,6),save_path=None):
    """將含有兩列的DataFrame表格數(shù)據(jù)作為雙軸圖
    :param data: DataFrame,含有兩列的DataFrame表格數(shù)據(jù)
    :param col1: str,左圖列標(biāo)題
    :param col2: str,右圖列標(biāo)題
    :param xlabel: str,橫軸標(biāo)題
    :param ylabel1: str,左y軸標(biāo)題
    :param ylabel2: str,右y軸標(biāo)題
    :param len_xticks: int,顯示的刻度個數(shù)
    :param figsize: turple,圖大小
    :param save_path: str,圖片保存路徑。默認(rèn)為None,不保存圖片
    :return:
    example:
        x=np.arange(0,100)
        data=pd.DataFrame({'銷售額(元)':3*x+np.random.random(100)*100,'增長率(%)':np.random.random(100)},index=pd.date_range('2015-01-23',periods=100,freq='D'))
        plot_twins(data,col1='銷售額(元)',col2='增長率(%)',xlabel=None,ylabel1='銷售額(元)',ylabel2='增長率(%)')
    """
    fig=plt.figure(figsize=figsize)#創(chuàng)建一塊總畫布
    # 將畫板分為四行四列共16個單元格,(0, 0)表示從第一行第一列即第一個單元格開始畫圖,將第一行的三個單元格作為一個畫塊作畫
    ax=plt.subplot2grid((1,1),(0,0),rowspan=1,colspan=1)

    plt.plot(data[col1],label=col1,color='r',marker='^')
    ax.legend(loc='upper right')#用于顯示畫布ax的圖,切記用 loc= 表示位置
    ax.set_ylabel(ylabel1)
    xticks=np.linspace(0,len(data),(len_xticks+1)).astype(int).tolist()[:-1]#被顯示的橫坐標(biāo)刻度值的位置
    ax.set_xticks(data.index[xticks])
    plt.xticks(rotation=270)

    twin=ax.twinx()
    plt.plot(data[col2],label=col2,color='y',marker='o')
    twin.legend(loc='upper left')
    twin.set_ylabel(ylabel2)
    ax.set_xlabel(xlabel)
    ax.grid(True,alpha=0.2)
    if save_path!=None: plt.savefig(save_path)if __name__=='__main__':
        x=np.arange(0,100)
        data=pd.DataFrame({'銷售額(元)':3*x+np.random.random(100)*100,'增長率(%)':np.random.random(100)},index=pd.date_range('2015-01-23',periods=100,freq='D'))
        plot_twins(data,col1='銷售額(元)',col2='增長率(%)',xlabel=None,ylabel1='銷售額(元)',ylabel2='增長率(%)')

python的matplotlib常用繪圖函數(shù)有哪些

3、將DataFrame表格中的多列數(shù)據(jù)繪制成多個圖

def plot_figs(data,xlabel=None,ylabels=None,save_path=None,len_xticks=5,length=10,width=3,intervals=1):
    """
    將DataFrame表格中的多列數(shù)據(jù)繪制成多個圖
    :param data:DataFrame,含有多列的表格
    :param xlabel:str,橫軸標(biāo)題
    :param ylabels:list,各個圖的縱軸標(biāo)題
    :param path_save:str,圖片保存路徑。默認(rèn)為None,不保存圖片
    :param len_xticks: int,顯示的刻度個數(shù)
    :param length:int,畫板長度
    :param width:int,圖畫寬度
    :param intervals:int,圖畫之間間隔距離
    :return:
    example:
        data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])
        plot_figs(data,xlabel='標(biāo)號',ylabels=['a','b','c'])
    """

    cols=data.columns
    num_fig = len(data.columns)
    fig = plt.figure(figsize=(length, 4*num_fig))  # 創(chuàng)建一塊總畫布
    for i in range(0,num_fig):
        #i=2

        ax = plt.subplot2grid((num_fig*(width+intervals), 1), (i*(width+intervals), 0), rowspan=width,
                               colspan=1)  # 將畫板分為四行四列共16個單元格,(0, 0)表示從第一行第一列即第一個單元格開始畫圖,將第一行的三個單元格作為一個畫塊作畫

        ax.plot(data[cols[i]], label=cols[i])
        ax.legend(loc='upper right')  # 用于顯示畫布ax1的圖,切記用 loc= 表示位置
        if ylabels!=None:ax.set_ylabel(ylabels[i])
        if xlabels!=None and i==(num_fig-1):ax.set_xlabel(xlabel)
        xticks = np.linspace(0, len(data), (len_xticks + 1)).astype(int).tolist()[:-1]  # 被顯示的橫坐標(biāo)刻度值的位置
        ax.set_xticks(data.index[xticks])
        plt.grid(True,alpha=0.2)
    if save_path != None: plt.savefig(save_path)if __name__=='__main__':
    data=pd.DataFrame(np.random.random((100,3)),index=np.arange(100),columns=['a','b','c'])
    plot_figs(data,xlabel='標(biāo)號',ylabels=['a','b','c'])

python的matplotlib常用繪圖函數(shù)有哪些

以上是“python的matplotlib常用繪圖函數(shù)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI