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,也可以達到我想要的效果。