美文网首页大数据,机器学习,人工智能Python中文社区
Python可视化12|matplotlib-垂直|水平|堆积条

Python可视化12|matplotlib-垂直|水平|堆积条

作者: pythonic生物人 | 来源:发表于2020-08-05 21:10 被阅读0次

    本文详细介绍matpltlib中垂直、水平和堆积三种柱形图的绘制。


    本文将学到什么?

    1、垂直柱形图
    垂直柱形图参数详解
    多个垂直柱形图并列显示
    柱形图高度显示在柱子上方
    堆积柱形图
    
    2、水平柱形图
    水平柱形图参数详解
    

    柱形图(又称柱状图、直方图、条形图)用于各组数据的数量比较,可以简单的分为水平柱形图、垂直柱形图及堆积柱形图。

    1、垂直柱形图

    垂直柱形图参数详解

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(dpi=100)
    labels = ['Jack','Rose','Jimmy']
    year_2019=np.arange(1,4)
    plt.bar(np.arange(len(labels)),#每个柱子的名称
            year_2019,#每个柱子的高度
            width=0.4,#柱子宽度,默认宽度: 0.8
            bottom=0,#柱子起始位置对应纵坐标,默认从0开始
            align='center',#柱子名称位置,默认为'center',可选'edge'
            color='pink',#柱子填充色
            edgecolor='b',#柱子外框线xian色
            linewidth=1,#柱子外框线宽度
            tick_label=labels,#自定义每个柱子的名称
            yerr=[0.1,0.2,0.3],#添加误差棒
            ecolor='red',#误差棒颜色,默认为黑色
            capsize=5,#误差棒上下的横线长度
            log=False,#y轴坐标取对数       
            )
    
    image

    多个垂直柱形图并列显示

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(dpi=100)
    labels = ['Jack','Rose','Jimmy']
    year_2019=np.arange(1,4)
    year_2020=np.arange(1,4)+1
    bar_width=0.4
    
    plt.bar(np.arange(len(labels))-bar_width/2,#为了两个柱子一样宽
            year_2019,
            color='#B5495B',
            width=bar_width, 
            label='year_2019'#图例
            
           )
    plt.bar(np.arange(len(labels))+bar_width/2,
            year_2020,
            color='#2ca02c',
            width=bar_width,
            label='year_2020'#图例
            
           )
    plt.xticks(np.arange(0, 3, step=1),labels,rotation=45)#定义柱子名称
    plt.legend(loc=2)#图例在左边
    
    image

    柱形图高度显示在柱子上方

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(dpi=100)
    labels = ['Jack','Rose','Jimmy']
    year_2019=np.arange(1,4)
    year_2020=np.arange(1,4)+1
    bar_width=0.4
    
    bar1 = plt.bar(np.arange(len(labels))-bar_width/2,#为了两个柱子一样宽
            year_2019,
            color='#B5495B',
            width=bar_width, 
            label='year_2019'#图例
            
           )
    bar2 = plt.bar(np.arange(len(labels))+bar_width/2,
            year_2020,
            color='#2ca02c',
            width=bar_width,
            label='year_2020'#图例
            
           )
    plt.xticks(np.arange(0, 3, step=1),labels,rotation=45)#定义柱子名称
    plt.legend(loc=2)#图例放置左边
    
    
    def autolabel(rects):
        """柱子上添加柱子的高度"""
        for rect in rects:
            height = rect.get_height()
            plt.annotate('{}'.format(height),
                        xy=(rect.get_x() + rect.get_width() / 2, height),
                        xytext=(0, 0.8),#柱子上方距离
                        textcoords="offset points",
                        ha='center', va='bottom')
            
    
    
    autolabel(bar1)
    autolabel(bar2)
    plt.tight_layout()
    plt.show()
    
    image

    堆积柱形图

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(dpi=100)
    labels = ['Jack','Rose','Jimmy']
    year_2019=np.arange(1,4)
    year_2020=np.arange(1,4)+1
    bar_width=0.4
    
    plt.bar(np.arange(len(labels)),
            year_2019,
            color='#B5495B',
            width=bar_width, 
            label='year_2019'
            )
    plt.bar(np.arange(len(labels)),
            year_2020,
            color='#2ca02c',
            width=bar_width,
            bottom=year_2019,#上面柱子起始高度设置为第一个柱子的结束位置,默认从0开始
            label='year_2020'#图例
            )
    plt.xticks(np.arange(0, 3, step=1),labels,rotation=45)#定义柱子名称
    plt.legend(loc=2)#图例在左边
    
    image

    2、水平柱形图

    水平柱形图参数详解

    注意比较和垂直柱形图中参数的细微差别

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(dpi=100)
    labels = ['Jack','Rose','Jimmy']
    year_2019=np.arange(1,4)
    plt.barh(np.arange(len(labels)),#每个柱子的名称
            width=year_2019,#柱子高度
            height=0.8,#柱子宽度,默认为0.8
            left=1,#柱子底部位置对应x轴的横坐标,类似bar()中的bottom         
            align='center',#柱子名称位置,默认为'center',可选'edge'
            color='pink',#柱子填充色
            edgecolor='b',#柱子外框线xian色
            linewidth=1,#柱子外框线宽度
            tick_label=labels,#自定义每个柱子的名称
            xerr=[0.1,0.2,0.3],#添加误差棒
            ecolor='red',#误差棒颜色,默认为黑色
            capsize=5,#误差棒上下的横线长度
            log=False,#y轴坐标取对数       
            )
    
    image

    3、参考资料

    https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html#matplotlib.pyplot.bar
    https://matplotlib.org/api/_as_gen/matplotlib.pyplot.barh.html#matplotlib.pyplot.barh


    更好的阅读体验请戳:Python可视化|matplotlib12-垂直|水平|堆积条形图详解
    欢迎微信搜索关注:pythonic生物人

    相关文章

      网友评论

        本文标题:Python可视化12|matplotlib-垂直|水平|堆积条

        本文链接:https://www.haomeiwen.com/subject/tyzorktx.html