zoukankan      html  css  js  c++  java
  • 小丸子踏入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()

    运行结果:

     

  • 相关阅读:
    关于代码中写日志的一些思考
    2018 年 深度学习框架 盘点 比较 推荐
    深度学习----实现一个博弈型的AI,从五子棋开始
    深度学习笔记----Anaconda及开发环境搭建
    彩票玩法介绍
    EditPlus 3.41 p1115 0728注册码
    丹--支付宝二维码
    C#类、方法的访问修饰符
    VS2010单元测试入门实践教程
    Nunit中如何进行事务性单元测试
  • 原文地址:https://www.cnblogs.com/qtww56/p/8746206.html
Copyright © 2011-2022 走看看