使用pandas繪圖

python中的matplotlib繪圖包功能已經很強大了,但是如果我們使用pandas分析數據,數據格式是DataFrame,就需要用pandas進行圖形繪製。這裏我主要講一下DataFrame.plot這個函數如何繪圖。

用pandas繪圖很簡單,如下圖1所示,我隨機生成了一個5*4的二維數組,將它們製成線圖。就是圖2這樣的。Pandas在繪圖的時候直接區分了ABCD四個列,把它們當作不同的y值,df的索引值被當作x值。然後畫出了四條線。
這裏寫圖片描述
這裏寫圖片描述

再看一個稍微複雜點的。下面這個例子是從一個json文件中讀取數據。json數據的字段是這些:
user_id 用戶 ID
lab 實驗名稱
course 課程名稱
minutes 學習分鐘數
created_at 學習時間

我們只需要用user_id做x軸,minutes做y軸,繪製一個學習總時長的線圖即可。所以從json中讀取數據,把它轉成DataFrame數據格式。

import matplotlib.pyplot as plt
import pandas as pd

def data_plot(file):
    fig = plt.figure()
    ax = fig.add_subplot(111)

    with open(file,'r') as fp:
        data = fp.read()

    df = pd.read_json(data)
    user_df = df[['user_id','minutes']].groupby('user_id').sum()
    ax=user_df.plot(ax=ax)

    ax.set_title("Study Data")
    ax.set_xlabel("User ID")
    ax.set_ylabel("Study Time")
    plt.show()

if __name__ == '__main__':
    data_plot('user_study.json')

因爲我想給加上諸如標題之類的東西,所以需要了解plot函數的參數。參數如下:

DataFrame.plot(x=None, y=None, kind='line', ax=None, 
subplots=False, sharex=None, sharey=False, 
layout=None,figsize=None, use_index=True, title=None, 
grid=None, legend=True, style=None, logx=False, 
logy=False,loglog=False, xticks=None, yticks=None, xlim=None,
 ylim=None, rot=None, fontsize=None, colormap=None,table=False, 
**kwds)

關於這些參數的詳細解釋可以在這篇文章看到:https://blog.csdn.net/sinat_24395003/article/details/60364345

根據要求,我要做出來的圖片是這樣的。所以我根據plot函數的參數,去設置圖片的標題和x、y軸的標籤。剛開始我是這樣寫的:

user_df.plot(title="Study Data",x="User ID",y="Study Time")
plt.show()

但是報錯了,KeyError。沒找到原因,可能是我對x、y這兩個參數的理解有問題吧。所以我用了ax參數。ax可以理解爲一個figure對象上的子圖。通過設置ax,也可以達到我想要的效果。
這裏寫圖片描述

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