超详细matplotlib学习笔记(含折线图、柱状图、直方图、饼状图案例)

  • matplotlib:

    • 能将数据进行可视化,更直观的呈现

    • 使数据更加客观,更具有说服力

  • matplotlib架构:

    • 上层调用下层
    • 后端:实现绘图区域(分配绘图的资源)
    • 美工:figure,axes,axis
    • 脚本:pyplot
  • 基础绘图:

    • 折线图:点的坐标(横坐标、纵坐标)
    • figure(绘制画图区域),plot,show(展示坐标轴)
    • xticks,yticks(设置刻度,中文)
    • xlable,ylable(设置坐标轴解释)
    • plot(参数)(绘制坐标)
    • lengend(设置显示图例)
    • plt.subplots(nrows=Num,ncols=Num,figsize=(20,8))(实现多个坐标系的图绘制)
  • 直方图:

    • 组数:数据按照不同的范围分成几个组

    • 组距:每个组两个端点的差

    • API:

      plt.hist(x,bins=None,normed=None,**kwargs)

      plt.grid(True,linestyle=’–’,alpha=0.5):显示网格

  • 对比:

    • 直方图:适合x坐标是连接的数据,数据量大
    • 柱状图:适合类别少、数据量小
  • 饼图:

    • 应用场景:表示不同分类的占比情况
    • API:plt.pie(x,explode=List,labels=None,autopct=’%1.2f%%’,colors=List,shadow=True,startangle=Num)
    • 绘制:注意显示整圆形 plt.axis(‘equal’)
  • K线图

    • API:

      candlestick_ochl(axes,day,width=0.2,colorup=‘r’,colordown=‘g’)

  • 折线图、柱状图、直方图、饼状图案例

    • 折线图初体验
    # 实现温度变化(折线图)的绘制
    #1、先生成fig
    plt.figure(figsize=(20,8))
    
    # 2、准备数据、折现图点,x,y坐标个数一一对应
    x = range(10)
    y = range(10,20)
    plt.plot(x,y)
    
    # 3、显示调用show()
    plt.show()
    

    在这里插入图片描述

    • 折线图初体验
    # 画出温度变化图
    # 创建一个figure
    plt.figure(figsize=(20,8))
    
    # 准备x,y坐标的数据
    x = range(60)
    y_shanghai = [random.uniform(15,18) for i in x]
    
    # 画折现图
    plt.plot(x,y_shanghai)
    
    plt.show()
    

    在这里插入图片描述

    • 两个城市的温度在一个坐标系显示
    # 显示某城市的温度变化图,11-12
    # 调价刻度调节
    plt.figure(figsize=(20,8))
    
    # 准备x,y坐标的数据
    x = range(60)
    
    # 准备上海y轴坐标
    y_shanghai = [random.uniform(15,18) for i in x]
    
    # 准备北京的y轴坐标
    y_beijing = [random.uniform(1,3) for i in x]
    
    # 设置中文刻度值
    x_ch = ["11点{}分".format(i) for i in x]
    
    y_ticks = range(40)
    
    # 画折现图
    plt.plot(x,y_shanghai,label='上海')
    plt.plot(x,y_beijing,color='r',linestyle='--',label='北京')
    
    # 修改刻度值
    # 指定显示的x刻度的列表
    # 第一个参数:必须是值
    # 第二个参数:指定跟第一个参数对应的中文
    # y 0-40
    plt.xticks(x[::5],x_ch[::5],fontsize=20)
    plt.yticks(y_ticks[::5],fontsize=20)
    
    # 增加标题,坐标轴描述
    plt.xlabel('时间',fontsize=20)
    plt.ylabel('温度',fontsize=20)
    plt.title('一些城市从11点到12点之间的温度',fontsize=20)
    
    # 增加图例的显示
    plt.legend(loc='best',fontsize=20)
    plt.show()
    

    在这里插入图片描述

    • 两个城市的温度,在多个坐标系显示
    # 两个城市的温度,在多个坐标系中显示
    # 调价刻度调节
    # plt.figure(figsize=(20,8))
    fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,8))
    
    # 准备数据
    x = range(60)
    
    # 准备上海y轴坐标
    y_shanghai = [random.uniform(15,18) for i in x]
    
    # 准备北京的y轴坐标
    y_beijing = [random.uniform(1,3) for i in x]
    
    # 设置中文刻度值
    x_ch = ["11点{}分".format(i) for i in x]
    
    y_ticks = range(40)
    
    # 画折现图
    ax[0].plot(x,y_shanghai,label='上海')
    ax[1].plot(x,y_beijing,color='r',linestyle='--',label='北京')
    
    # 修改刻度值
    # 指定显示的x刻度的列表
    # 第一个参数:必须是值
    # 第二个参数:指定跟第一个参数对应的中文
    # y 0-40
    ax[0].set_xticks(x[::5],x_ch[::5])
    ax[1].set_xticks(x[::5],x_ch[::5])
    
    ax[0].set_yticks(y_ticks[::5])
    ax[1].set_yticks(y_ticks[::5])
    
    # 增加标题,坐标轴描述
    ax[0].set_xlabel('时间',fontsize=20)
    ax[0].set_ylabel('温度',fontsize=20)
    ax[0].set_title('一些城市从11点到12点之间的温度',fontsize=20)
    
    ax[1].set_xlabel('时间',fontsize=20)
    ax[1].set_ylabel('温度',fontsize=20)
    ax[1].set_title('一些城市从11点到12点之间的温度',fontsize=20)
    
    # 增加图例的显示
    ax[0].legend(loc='best',fontsize=20)
    ax[1].legend(loc='best',fontsize=20)
    plt.show()
    

    在这里插入图片描述

    • 电影票房数据的对比(柱状图)
    # 电影票房数据的对比(柱状图)
    plt.figure(figsize=(20,8))
    
    # 电影名字,每部电影对应的票房
    movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其他']
    y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
    # 放进横坐标的数字列表
    x = range(len(movie_name))
    color = ['b','r','g','y','c','m','y','k','c','g','g']
    
    
    # 使用plt.bar去显示
    # plot.bar:填入的x坐标必须全是数字
    plt.bar(x,y,width=0.2,color=color)
    
    # 去修改刻度,以及电影名字显示
    plt.xticks(x,movie_name,fontsize=16)
    plt.show()
    

    在这里插入图片描述

    • 对比不同电影的首日、首周的电影票房
    # 对比不同电影的首日、首周的电影票房
    # 电影票房数据的对比(柱状图)
    plt.figure(figsize=(20,8))
    
    
    # 电影名字,每部电影对应的票房
    movie_name = ['雷声3:诸神黄昏','正义联盟','寻梦环游记']
    first_day = [10587.6,10062.5,1275.7]
    first_weekend = [36224.9,34479.6,11830]
    
    x = range(len(movie_name))
    
    # 使用plt.bar去显示
    # plot.bar:填入的x坐标必须全是数字
    plt.bar(x,first_day,width=0.2,label='首日票房')
    plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房')
    
    # 去修改刻度,以及电影名字显示
    plt.xticks([i+0.1 for i in x],movie_name,fontsize=16)
    
    # 显示图例
    plt.legend(loc='best',fontsize=20)
    
    plt.show()
    

    在这里插入图片描述

    • 电影时长分布直方图
    # 电影时长分布直方图 
    # 组数 组距
    # 组距:2
    # 创建
    plt.figure(figsize=(20,8))
    
    time = [131,98,125,131,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,124,127,138,117,121,102,130,138,137,126,128,132,131,119,114,126,115]
    bins = 2
    
    # 组数 = 极差/组距 
    group = int((max(time)-min(time))/bins)
    
    # 画直方图
    # normed参数:指定纵坐标显示频率
    # plt.hist(time,group,normed=1)
    plt.hist(time,group)
    
    # 指定刻度的范围,以及步长
    plt.xticks(list(range(min(time),max(time)))[::2])
    
    plt.xlabel('电影市场大小',fontsize=20)
    plt.ylabel('电影的数据量',fontsize=20)
    
    # 添加网格
    plt.grid(True,linestyle='--',alpha=0.5)
    
    plt.show()
    

    在这里插入图片描述

    • 电影的拍片占比显示
    # 电影的拍片占比显示
    plt.figure(figsize=(20,8))
    
    
    movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其他']
    place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
    color = ['b','r','g','y','c','m','y','k','c','g','g']
    # 显示饼图
    plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=color)
    plt.axis('equal')
    plt.legend(loc='best')
    plt.show()
    

    在这里插入图片描述

    • 饼状图显示宠物偏爱比例
    labels = 'Frogs','Hogs','Dogs','Logs'
    sizes = [15,30,45,10]
    explode = (0,0.1,0,0)
    fi1,ax1 = plt.subplots()
    ax1.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
    
    ax1.axis('equal')
    
    plt.show()
    

    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45821420/article/details/108929847