小丸子踏入python之路:python_day06(可视化库Matplotlib (2) )

  在可视化库Matplotlib(1)中学习了折线图和子图,那么现在开始学习柱状图(条形图),散点图

1. 柱状图

    柱状图的生成函数是bar()bar()方法有两个必需的参数,分别是left和height。

  我们使用left来指定每个bar的高度的x坐标。我们使用height参数来指定每个条的高度。

  第三个参数表示每个柱子的宽度。

1.1 生成柱状图需要的数据

  这里用到的数据是美国各个网站对电影的评分数据集。"fandango_score_comparison.csv"文件。像惯常一样,打开它,取数据,我们这里选取5家网站对第一部电影的评分数据来绘制柱状图。

#关于电影评分的数据
import pandas as pd
reviews = pd.read_csv("fandango_score_comparison.csv")  
#抽出几列数据拿出来玩一下下,包括电影名和五家评分网站
cols = ["FILM","RT_user_norm","Metacritic_user_nom","IMDB_norm","Fandango_Ratingvalue","Fandango_Stars"] 
norm_reviews = reviews[cols]    
print(norm_reviews[:1])         #打印抽取数据的第一行来看看

运行结果:

最后一行不带print()会使数据更清楚

1.2 就上边数据生成柱状图

  还是在前边说一下关于 fig, ax = plt.subplots()吧,这是很多实例中给出的做法,具体的理解可能就是:

subplot()是一个函数,它返回包含图形和轴对象的元组。因此,当使用图ax = plt.sub()时,您将这个元组解压缩到变量图和ax中。

因为返回的是元组,所以要用fig, ax这个变量来接收。
import matplotlib.pyplot as plt
from numpy import arange
#bar()方法有两个必需的参数,分别是left和height。
#我们使用left来指定每个bar的高度的x坐标。我们使用height参数来指定每个条的高度。
num_cols = ["RT_user_norm","Metacritic_user_nom","IMDB_norm","Fandango_Ratingvalue","Fandango_Stars"]

bar_heights = norm_reviews.ix[0,num_cols].values        #取各个评分网站对第一部电影的评分,作为bar()的第二个参数
print(bar_heights)
bar_positions = arange(5) + 1.00     #bar()的第一个参数
print(arange(5))
print(bar_positions)
fig, ax = plt.subplots()     #subplot()是一个函数,它返回包含图形和轴对象的元组。因此,当使用图ax = plt.sub()时,您将这个元组解压缩到变量图和ax中。
ax.bar(bar_positions, bar_heights,0.3)   #第三个参数0.3表示每个主子的宽度
plt.show()

运行结果:

 1.3 完整一些的上边的柱形图

 

  如上边所示,柱状图默认的x轴式(1,2,3,4,5),但是在电影评分的数据中我们知道,x轴应该是各大评分网站的名字的,我们可以通过设置来显示。

  在默认情况下,matplotlib将x轴的刻度标签设置为整数,在x轴上(从0到6),我们只需要在横条的x轴上标上标记。

我们可以使用Axes.set_xticks()来改变节拍的位置(1、2、3、4、5):

import matplotlib.pyplot as plt
from numpy import arange
#bar()方法有两个必需的参数,分别是left和height。
#我们使用left来指定每个bar的高度的x坐标。我们使用height参数来指定每个条的高度。
num_cols = ["RT_user_norm","Metacritic_user_nom","IMDB_norm","Fandango_Ratingvalue","Fandango_Stars"]

bar_heights = norm_reviews.ix[0,num_cols].values        #取各个评分网站对第一部电影的评分,作为bar()的第二个参数
bar_positions = arange(5) + 1.00     #bar()的第一个参数
tick_positions = range(1,6)          #将其设置为(1,6)是为了让其评分网站名字与数据对应上
fig, ax = plt.subplots() #subplot()是一个函数,它返回包含图形和轴对象的元组。因此,当使用图ax = plt.sub()时,您将这个元组解压缩到变量图和ax中。 ax.bar(bar_positions, bar_heights,0.4) #第三个参数0.3表示每个主子的宽度 ax.set_xticks(tick_positions) ax.set_xticklabels(num_cols,rotation = 20) #将x轴改成评分网站的名字,并倾斜20度显示 ax.set_xlabel('Rating Source') ax.set_ylabel('Average Rating') ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)') plt.show()

运行结果:

1.4 横着显示柱状图

  一般情况下,柱状图都是竖着显示的,但是有时也可以横着显示,两个的代码基本相同,只是把bar()换成了barh()

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()的第二个参数
bar_positions = arange(5) + 1.00     #bar()的第一个参数
tick_positions = range(1,6)          #将其设置为(1,6)是为了让其评分网站名字与数据对应上

fig, ax = plt.subplots()     #subplot()是一个函数,它返回包含图形和轴对象的元组。因此,当使用图ax = plt.sub()时,您将这个元组解压缩到变量图和ax中。

ax.barh(bar_positions, bar_heights,0.4)   #第三个参数0.3表示每个主子的宽度
ax.set_yticks(tick_positions)
ax.set_yticklabels(num_cols,rotation = 0) #将x轴改成评分网站的名字,并倾斜20度显示

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

运行结果:

 

2 散点图

2.1 关于两个评分网站的散点图

    设置散点图的函数为:.scatter( ),左参数为散点图的横坐标数据,右参数为散点图的纵坐标数据。并且表示x,y的这些数据必须是同纬度的。

  基于数据,我们使用两个评分网站“Fandango_Ratingvalue”和“RT_user_norm”的数据进行散点图的绘制。 

fig, ax = plt.subplots()
#画Fandango_Ratingvalue和RT_user_norm评分网站的散点图
ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])

ax.set_xlabel('Fandango')
ax.set_ylabel('Rotten Tomatoes')
plt.show()

运行结果:

 2.2 在2.1的基础上转换一下轴显示

#Switching Axes
fig = plt.figure(figsize=(10,5))       #指定画图区域
ax1 = fig.add_subplot(1,2,1)           #定义两个子图
ax2 = fig.add_subplot(1,2,2)
ax1.scatter(norm_reviews[
'Fandango_Ratingvalue'], norm_reviews['RT_user_norm']) ax1.set_xlabel('Fandango') ax1.set_ylabel('Rotten Tomatoes') #ax1与ax2的区别就是转换了一下x与y轴,嗯,就是这样 ax2.scatter(norm_reviews['RT_user_norm'], norm_reviews['Fandango_Ratingvalue']) ax2.set_xlabel('Rotten Tomatoes') ax2.set_ylabel('Fandango') plt.show()

运行结果:

 

 

posted @ 2018-04-08 21:40  顽皮小丸子  阅读(432)  评论(3编辑  收藏  举报