6.4 条形图

6.4.1 条形图简介

条形图( bar diagram)是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条。 其优点是非常直观的比较出各种属性统计值的标量。

6.4.2 条形图的绘制

快速绘制条形图

以电影数据集为例,本数据集fandango_scores.csv可以从网站上下载(地址www.joy888.com)。通过数据集可视化处理,可以直观的看出不同的电影评分网站对同一电影的评分比较。
首先利用Pandas库读取数据集,示例代码:

import pandas as pd
reviews = pd.read_csv("fandango_scores.csv")
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
print(norm_reviews[:1])

运行结果:

                             FILM  RT_user_norm  Metacritic_user_nom  \
0  Avengers: Age of Ultron (2015)           4.3                 3.55   

   IMDB_norm  Fandango_Ratingvalue  Fandango_Stars  
0        3.9                   4.5             5.0  

由结果可以看出,5个不同的电影网站对同一电影(Avengers:Age of Ultron)的评分值。
下面引入matplotlib库并绘制条形图,条形图需要利用子图对象的bar方法,其中bar参数需要设定条形图的起始位置(即与原点的距离),以及每个条形长度(bar_heights)和粗度,示例代码:

import matplotlib.pyplot as plt
from numpy import arange
num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
bar_heights = norm_reviews.ix[0, num_cols].values        # 定义条形的高度
bar_positions = arange(5)+1        # 定义条形距离原点的距离
fig,ax = plt.suplots()
ax.bar(bar_positions, bar_heights, 0.5)        # 0.5表示定义条形的粗度
plt.show()

显示结果:

6.4 条形图_第1张图片
电影评分条形图1

条形图细化

下面,对以上条形图进行细化,要指明图形的名称(set_title),x轴(set_xlabel)和y轴(set_ylabel)的定义,以及x轴的刻度(set_xticks或者set_xticklabels),示例代码:

num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
bar_heights = norm_reviews.ix[0, num_cols].values
bar_positions = arange(5) + 1
tick_positions = range(1,6)
fig, ax = plt.subplots()

ax.bar(bar_positions, bar_heights, 0.5)
ax.set_xticks(tick_positions)
ax.set_xticklabels(num_cols, rotation=45)

ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()

显示结果:

6.4 条形图_第2张图片
电影评分条形图2

水平条形图

以上绘制的是垂直条形图,我们可以利用matplotlib库的barh方法绘制水平条形图,其中每个条形的长度由bar_height修改为bar_width,x轴和y轴的参数对调,示例代码:

import matplotlib.pyplot as plt
from numpy import arange
num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']

bar_widths = norm_reviews.ix[0, num_cols].values
bar_positions = arange(5) + 1
tick_positions = range(1,6)
fig, ax = plt.subplots()
ax.barh(bar_positions, bar_widths, 0.5)

ax.set_yticks(tick_positions)
ax.set_yticklabels(num_cols)
ax.set_ylabel('Rating Source')
ax.set_xlabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()

显示结果:

6.4 条形图_第3张图片
电影评分条形图3

你可能感兴趣的:(6.4 条形图)