使用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,也可以达到我想要的效果。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37923128/article/details/80037390