python plt plot markersize 用法 python plot kind_字段


了解 Matplotlib 的基本用法后,我们接着来看如何在 Pandas 中使用 Matplotlib 绘图,使用 IMDB Top 1000 的电影数据 ( IMDB_Movie.csv 文件,下载链接 ) 作为示例数据,各个字段的含义如表3.1 所示。

python plt plot markersize 用法 python plot kind_字段_02

表 3.1 电影数据文件字段说明


Pandas 绘图使用 DataFrame.plot ( x=None, y=None, kind='line', title=None, legend=True, xticks=None, yticks=None, xlim=None, ylim=None, **kwds ) 函数,有多个参数可以设置,比如图表的类型、标题、图例、坐标轴的标签刻度等。其中最重要的就是 kind 参数,代表所绘图表的类型,kind 的常用值如表 3.2 所示,默认值为 line 。


python plt plot markersize 用法 python plot kind_数据_03

表 3.2 kind 常用值

接下来我们一一介绍这些常见图表的作法。

3.1 折线图

折线图通常用来反映数据变化的趋势,如图 3.1 所示为Top 1000部电影在每一年的数量分布,2010 年之前上榜的电影数量基本在 50 左右徘徊,之后逐步上升,2016 年的数量最高,有接近 300 部电影。


mport


python plt plot markersize 用法 python plot kind_数据_04

图 3.1 电影数量按年分布折线图

3.2 柱状图

柱状图用一系列高度不等的条纹来表示数据分布的情况,可以横置或纵置。

数据中电影类型 Type 是用逗号分隔的字符串,比如 'Action, Horror', 因为一部电影可能同时属于喜剧、动作、科幻等类型,截取出 Type 的第一个值作为新的字段 Movie_Type,然后按照 Movie_Type 字段分组画出电影类型个数的柱状图,如图 3.2.1 所示。


movie_pd['Movie_Type'] = movie_pd['Type'].map(lambda x : x.split(',')[0])
movie_type = movie_pd.groupby('Movie_Type').size().reset_index(name = 'Count')
movie_type.plot(kind = 'barh', x = 'Movie_Type', legend = False)
plt.title('Movie Count By Type')
plt.ylabel('')
plt.tick_params(labelsize = 9)
plt.show()


python plt plot markersize 用法 python plot kind_数据_05

图 3.2.1 电影类型柱状图

其中 plt.tick_params ( labelsize = 9 ) 表示设置坐标轴标签的字体大小为9。

根据电影的评分 Rating,可以将电影划分为不同的等级,如 0-6 分的为 Bad,6-7.5 分的为Normal,7.5-10 分的为 Excellent, 命名为新的字段 Grade,然后绘制出电影年份和等级两个字段的复式柱状图,便于比较不同年份电影的质量情况,如图 3.2.2 所示。


movie_pd['Grade'] = pd.cut(movie_pd['Rating'], bins = [0, 6, 7.5, 10], labels=['Bad', 'Normal', 'Excellent'])
group_pd = movie_pd.groupby(['Year', 'Grade']).size().unstack()
group_pd[['Bad', 'Normal', 'Excellent']].plot(kind = 'bar')
plt.title('Movie Count By Year and Grade')
plt.show()


python plt plot markersize 用法 python plot kind_pandas cut count_06

图 3.2.2 电影年份和等级的复式柱状图

通过设置 stacked = True 的参数,可以绘制出电影年份和等级的复式堆积柱状图,这样就可以很容易看出每一年电影的质量情况,如图 3.2.3 所示。


group_pd[['Bad', 'Normal', 'Excellent']].plot(kind = 'bar', stacked = True)
plt.title('Movie Count By Year and Grade (Stacked)')
plt.show()


python plt plot markersize 用法 python plot kind_pandas cut count_07

图 3.2.3 电影年份和等级的复式堆积柱状图

3.3 直方图

直方图是用于展示分组数据分布的一种图形,它是用矩形的宽度和高度来表示频数分布的,如图 3.3 所示为电影评分的直方图,可见大部分电影的评分都集中在 6 ~ 8 分。


movie_pd[['Rating']].plot(kind = 'hist', bins = 50)
plt.title('Movie Rating Histogram')
plt.show()


python plt plot markersize 用法 python plot kind_字段_08

图 3.3 电影评分的直方图

3.4 散点图

散点图通常用来展示两个变量之间的关系,电影投票数和评分的高低是否有一定关系,评分高的电影投票数是不是一定也很多呢?如图 3.4 所示。


movie_pd.plot(kind = 'scatter', x = 'Votes', y = 'Rating')
plt.title('Scatter of Movie Votes and Rating')
plt.show()


python plt plot markersize 用法 python plot kind_pandas cut count_09

图 3.4 电影投票数和评分散点图

由散点图可以看出,投票数最高的几部电影评分确实很高,但也有一些投票数少但评分高的电影存在,两者并没有很强的正相关性。

3.5 饼图

饼图是用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示各个组成部分的数据占总体数据的百分比,如图 3.5 所示为电影等级的饼图。


movie_pd['Grade'].value_counts().plot(kind='pie', autopct='%.2f%%', startangle=90)
plt.axis('equal')
plt.title('Movie Grade Pie')	
plt.ylabel('')
plt.show()


python plt plot markersize 用法 python plot kind_柱状图_10

图 3.5 电影等级饼图