温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Matplotlib绘制条形图的方法有哪些

发布时间:2022-03-22 09:08:23 来源:亿速云 阅读:203 作者:iii 栏目:开发技术

这篇文章主要介绍了Matplotlib绘制条形图的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matplotlib绘制条形图的方法有哪些文章都会有所收获,下面我们一起来看看吧。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib import font_manager

    一、一般条形图

    一般条形图使用 pyplot.bar()函数绘制,其形式及参数如下:

    matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
    主要参数解释:
    # x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。
    # height:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。
    # width:每一个条形图的宽度,默认是0.8的宽度。
    # bottom:y轴的基线,默认是0,也就是距离底部为0.
    # align:对齐方式,{'center','edge'},默认是center,居中对齐;edge为靠边对齐,具体靠右边还是靠左边,看width的正负。
    # color:条形图的颜色。
    # edgecolor : 条形图边框的颜色。
    # linewidth  : 条形图边框的宽度。如果为 0,则不绘制边框

    示例:

    某天电影票房数据:

    movies = {
        "流浪地球":40.78,
        "飞驰人生":15.77,
        "疯狂的外星人":20.83,
        "新喜剧之王":6.10,
        "廉政风云":1.10,
        "神探蒲松龄":1.49,
        "小猪佩奇过大年":1.22,
        "熊出没·原始时代":6.71
    }

    直接通过获取字典的键值作为x,y轴数据

    #票房单位亿元
    movies = {
        "流浪地球":40.78,
        "飞驰人生":15.77,
        "疯狂的外星人":20.83,
        "新喜剧之王":6.10,
        "廉政风云":1.10,
        "神探蒲松龄":1.49,
        "小猪佩奇过大年":1.22,
        "熊出没·原始时代":6.71
    }
    # 中文显示问题
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['font.size'] = 13
    # 设置图大小
    plt.figure(figsize=(15,8))
    
    x = list(movies.keys()) # 获取x轴数据(字典的键)
    y = list(movies.values()) # 获取y轴数据(字典的值)
    
    plt.bar(x,y,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)
    
    # 绘制标题
    plt.title("电影票房数据",size=26)
    
    # 设置轴标签
    plt.xlabel("电影名",size=28)
    plt.ylabel("票房/亿",size=28)
    
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    也可以利用字典创建DataFrame索引,通过data参数传入

    #票房单位亿元
    movies = {
        "流浪地球":40.78,
        "飞驰人生":15.77,
        "疯狂的外星人":20.83,
        "新喜剧之王":6.10,
        "廉政风云":1.10,
        "神探蒲松龄":1.49,
        "小猪佩奇过大年":1.22,
        "熊出没·原始时代":6.71
    }
    movies_df = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())}) #通过字典创建DataFrame索引
    font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=12)  # 使用font_manager模块设置中文
    
    # 设置图的大小,传入x,y
    plt.figure(figsize=(14,5))
    
    # 使用plt.bar()绘制条形图
    plt.bar("name","tickes",data=movies_df,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)
    
    #设置X轴刻度,设置字体,也可以设置字体大小size
    plt.xticks(fontproperties=font)
    
    # 设置标题
    plt.title("电影票房数据",size=30)
    #设置X,Y轴名字
    plt.ylabel('票房',fontproperties=font,size=25)
    plt.xlabel('影片名字',fontproperties=font,size=25)
    
    #设置Y刻度
    plt.yticks(range(0,50,5),["%d"%x for x in range(0,50,5)],fontproperties=font1,size=20)
    
    # 只保留图形信息
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    二、横向条形图

    横向条形图需要使用barh()这个跟bar非常的类似,只不过把方向进行旋转。参数也和pyplot.bar()类似

    matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
    # 主要参数解释:
    # y:数组或列表,代表需要绘制的条形图在y轴上的坐标点。
    # width:数组或列表,代表需要绘制的条形图在x轴上的值(也就是长度)。
    # height:条形图的高度(宽度),默认是0.8。
    # left:条形图的基线,也就是距离y轴的距离。默认为0

    示例:

    plt.barh()

    movies = {
        "流浪地球":40.78,
        "飞驰人生":15.77,
        "疯狂的外星人":20.83,
        "新喜剧之王":6.10,
        "廉政风云":1.10,
        "神探蒲松龄":1.49,
        "小猪佩奇过大年":1.22,
        "熊出没·原始时代":6.71
    }
    font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
    x1 = list(movies.keys())
    y1 = list(movies.values())
    
    # 设置图的大小
    plt.figure(figsize=(10,5))
    
    # 使用plt.barh()
    plt.barh(x1,y1,height=0.7,left=0,color='c',edgecolor='r')
    
    #设置Y轴刻度,设置字体,也可以设置字体大小size
    plt.yticks(fontproperties=font2,size=20)
    
    plt.xlabel("票房/亿",size=20)
    
    # 设置标题
    plt.title("电影票房数据",size=30)
    
    # 只保留图形信息
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    Axes.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)

    另外,还可通过返回的axes对象绘制图形

    movies = {
        "流浪地球":40.78,
        "飞驰人生":15.77,
        "疯狂的外星人":20.83,
        "新喜剧之王":6.10,
        "廉政风云":1.10,
        "神探蒲松龄":1.49,
        "小猪佩奇过大年":1.22,
        "熊出没·原始时代":6.71
    }
    
    font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
    mdf = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())})
    
    fig,axes = plt.subplots()  
    
    # 通过返回的axes对象绘制图形
    axes.barh("name","tickes",data = mdf,height=0.6,left=0,color='c',edgecolor='r')
    
    #设置Y轴刻度,设置字体,也可以设置字体大小size
    plt.yticks(fontproperties=font2,size=20)
    
    plt.xlabel("票房/亿",size=24)
    
    # 设置标题
    plt.title("电影票房数据",size=27)
    
    # 只保留图形信息
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    三、分组条形图的绘制

    五天的电影票房数据(假设日期为1.1-1.5):并转换为DataFrame索引

    movies = {
        "流浪地球":[2.01,4.59,7.99,11.83,16],
        "飞驰人生":[3.19,5.08,6.73,8.10,9.35],
        "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03],
        "新喜剧之王":[2.72,3.79,4.45,4.83,5.11],
        "廉政风云":[0.56,0.74,0.83,0.88,0.92],
        "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23],
        "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07],
        "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05]
    }
    mdf = pd.DataFrame(movies)  
    mdf

    Matplotlib绘制条形图的方法有哪些

    绘制分组条形图思路:先选出每天所有电影的票房数据,可使用DataFrame.iloc[]方法获取,例如

    # 获取第一天票房数据
    mdf.iloc[0]
    流浪地球        2.01
    飞驰人生        3.19
    疯狂的外星人      4.07
    新喜剧之王       2.72
    廉政风云        0.56
    神探蒲松龄       0.66
    小猪佩奇过大年     0.58
    熊出没·原始时代    1.13
    Name: 0, dtype: float64

    然后按天进行绘制,这里需要确定一个中心点作为中间日期的条形图位置(这里为第三天),有多少部电影就需要多少个中心点,可使用np.arange(len(movies))获取x轴刻度作为中心点。最后根据日期按条形图的宽度调整条形图位置即可。

    plt.figure(figsize=(15,5))
    # 设置X轴刻度为一个数组(有广播功能)
    xticks = np.arange(len(movies)) 
    
    #设置字体
    font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
    
    # 设置条形图宽度
    bar_width = 0.15
    
    #设置第一天所有影片条形图的位置
    plt.bar(xticks-2*bar_width,mdf.iloc[0],width=bar_width,color='pink') # iloc[]取DataFrame的一行
    #设置第二天所有影片条形图的位置 
    plt.bar(xticks-bar_width,mdf.iloc[1],width=bar_width)
    #设置第三天所有影片条形图的位置,默认在[0 1 2 3 4 5 6 7]center处
    plt.bar(xticks,mdf.iloc[2],width=bar_width)
    #设置第四天所有影片条形图的位置
    plt.bar(xticks+bar_width,mdf.iloc[3],width=bar_width)
    #设置第五天所有影片条形图的位置
    plt.bar(xticks+2*bar_width,mdf.iloc[4],width=bar_width)
    
    # 设置X轴信息
    plt.xticks(xticks,mdf.columns,fontproperties=font,size=15)
    #设置Y刻度
    plt.yticks(range(0,20,2),["%d"%x for x in range(0,20,2)],fontproperties=font,size=16)
    
    #设置X,Y轴名字
    plt.ylabel('票房/亿',fontproperties=font,size=30)
    plt.xlabel('影片名字',fontproperties=font,size=30)
    
    # 设置标题
    plt.title("五日票房数据",fontproperties=font,size=30)
    
    # 只保留图形信息
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    使用循环绘制每日数据

    plt.figure(figsize=(16,5))
    # 设置X轴刻度为一个数组(有广播功能)
    #xticks1 = np.arange(len(movies)) # 这样设置每部电影X轴的距离是1,如果5个条形图宽度之后大于1会和其他电影重叠,可以设置步长
    xticks1 = np.arange(0,7*len(movies),7) # 改变步长,要在设置X轴信息处改变xticks(步长*ticks labels)的第一个参数,否则对应不上
    
    #设置字体
    font4 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
    
    # 设置条形图宽度
    bar_width2 = 1.05
    
    #使用循环画出前五天的条形图
    for index in mdf.index:
       # plt.bar(xticks1+(-2+index)*bar_width2,mdf.iloc[index],width=bar_width2,label='第%d天票房'%(index+1))
        xs = xticks1+(-2+index)*bar_width2 # 在X轴的位置
        day_tickets = mdf.iloc[index]
        plt.bar(xs,day_tickets,width=bar_width*7,label="第%d天票房"%(index+1))
        #设置注释文本
        # zip(day_tickets,xs)打包为元素为元组的列表,元素个数与最短的列表一致
        for ticket,x in zip(day_tickets,xs):   # ticket是day_tickets列表的值,x是xs的值
            plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.2,ticket+0.1))
    
    
    # 设置X轴信息
    plt.xticks(7*xticks,mdf.columns,fontproperties=font4,size=15)
    
    #设置X,Y轴名字
    plt.ylabel('票房/亿',fontproperties=font4,size=25)
    plt.xlabel('影片名字',fontproperties=font4,size=25)
    
    # 设置标题
    plt.title("五日票房数据",fontproperties=font4,size=30)
    
    # 设置图例
    font4.set_size(15) # 图例无size属性,可以在字体设置font4中改大小(或者font.set_size():只改图例
    plt.legend(prop=font4)  # 根据bar()函数的中的label标签进行设置,不可缺少
    
    # 设置网格
    plt.grid()
    
    # 只保留图形信息
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    四、堆叠条形图绘制

    堆叠条形图就是在已有数据基础位置上进行绘制图形,使用bottom参数,以已有数据作为新数据的基地进行新数据的绘制,可以达到调整条形图的位置的目的。

    示例:

    # 男女不同组别的等分情况
    menMeans = (20, 35, 30, 35, 27)
    womenMeans = (25, 32, 34, 20, 25)
    groupNames = ('G1','G2','G3','G4','G5')
    
    xs = np.arange(len(menMeans))  # 有多少个组
    
    font5 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=16)
    
    plt.figure(figsize=(15,7))
    
    # 绘制男性得分
    plt.bar(xs,menMeans,label='男性得分',width=0.4)
    
    # 绘制女性得分,以男性得分的最大值为基底
    plt.bar(xs,womenMeans,bottom=menMeans,label='女性得分',width=0.4)
    
    #设置图例
    plt.legend(prop=font5)  # 根据bar()函数的中的label标签进行设置
    
    # 设置X轴刻度名称
    plt.xticks(xs,groupNames)
    
    # 设置标签
    plt.xlabel("组别",fontproperties=font5,size=23)
    plt.ylabel("得分",fontproperties=font5,size=23)
    
    # 设置标题
    plt.title("男女不同组别得分",fontproperties=font5,size=28)
    
    # 只保留图形
    plt.show()

    Matplotlib绘制条形图的方法有哪些

    关于“Matplotlib绘制条形图的方法有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Matplotlib绘制条形图的方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI