Python用 matplotlib 绘制柱状图

作者:盆友圈的小可爱 时间:2023-01-22 01:20:50 

目录
  • 1. 柱状图概述

    • 1.1什么是柱状图

    • 1.2柱状图使用场景

    • 1.3柱状图绘制步骤

    • 1.3案例展示

  • 2. 柱状图属性

    • 2.1柱状体颜色填充

    • 2.2状描边设置

    • 2.3状体边框宽度

    • 2.4刻度标签

  • 3. 堆叠柱状图

    • 4. 并列柱状图

      • 5. 水平柱状图

        • 6. 添加折线柱状图

          • 7. 正负柱状图

            复习回顾:

            Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图、柱状图、散点图等高质量的数据包。
            关于 matplotlib 模块,我们前期已经对matplotlib进行基本框架、以及常用方法的学习

            ?matplotlib 模块基础知识:对matplotlib模块进行初步认识,对常用的方法进行学习
            matplotlib 模块底层原理:matplotlib 模块包含脚本层、美工层及后端层三层细节了解
            matplotlib 模块折线图绘制:总结折线图相关属性和方法

            在 matplotlib 模块提供的图表中,除了折线图使用最多外,柱状图也是我们日常数据分析的图表。

            Python用 matplotlib 绘制柱状图

            接下来我们开始学习绘制柱状图相关属性和方法

            1. 柱状图概述

            1.1什么是柱状图

            • 柱状图又称为条形图,是一种以长方形的长度为变量数据进行统计的图表

            • 柱状图用来比较两个或以上类型

            • 柱状图只有一个以长方形的长度为变量

            • 柱状图可以横向排列或者多维方式展示

            1.2柱状图使用场景

            • 柱状图适用在较小数据集的分析

            • 适用二维数据集,只比较一个维度数据差异项

            • 直观展示各个体之间数据的差异

            • 表现离散型的时间序列

            1.3柱状图绘制步骤

            • 导入matplotlib.pyplot模块

            • 准备数据,可以使用numpy/pandas整理数据

            • 调用pyplot.bar()绘制柱状图

            1.3案例展示

            本次,我们分析过去5年内的产品年销量展示

            案例所用到的数据如下:


            import random

            x_data = ["20{}年".format(i) for i in range(16,21)]
            y_data = [random.randint(100,300) for i in range(6)]

            绘制柱状图


            import matplotlib.pyplot as plt

            plt.rcParams["font.sans-serif"]=['SimHei']
            plt.rcParams["axes.unicode_minus"]=False

            for i in range(len(x_data)):
               plt.bar(x_data[i],y_data[i])

            plt.title("销量分析")
            plt.xlabel("年份")
            plt.ylabel("销量")

            plt.show()

            Python用 matplotlib 绘制柱状图

            2. 柱状图属性

            2.1柱状体颜色填充

            • facecolor(fc)关键字

            • color 关键字

            • 颜色简称:

            属性值说明属性值说明
            "b"/"bule"蓝色"m"/"magenta"品红
            "g" /"green"绿色"y"/"yellow"黄色
            "r"/"red"红色"k"/"black"黑色
            "c"/"cyan"青色"w"/"white"

            rgb:

            • 格式形式:(r,g,b)

            • 取值范围:0~1

            2.2状描边设置

            柱状体边框颜色

            • edgecolor 或者 ec

            柱状体边框样式

            • linestyle 或者 ls

            • 线条样式:

            属性值说明
            "-" 、"solid"默认实线显示
            "--"、"dashed"虚线
            "-." "dashdot"点划线
            ":"、"dotted"虚线
            "None" """"

            2.3状体边框宽度

            • linewidth 或者 lw

            • 柱状图填充样式

            hatch: 设置填充样式
            属性取值:{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'} |

            2.4刻度标签

            • tickle label:默认使用数字标签

            我们对 第一节柱状图添加边框样式为"--",添加指定rgb颜色,填充圆圈


            for i in range(len(x_data)):
              plt.bar(x_data[i],y_data[i],color=(0.2*i,0.2*i,0.2*i),linestyle="--",hatch="o")

            Python用 matplotlib 绘制柱状图

            3. 堆叠柱状图

            • 在柱状图中,我们会在同时对比两组数据在同一类中的表现形式,因此需要绘制堆叠柱状图

            • bottom : 条形底座的y坐标,默认值为0

            在第一节案例中,添加一组y轴数据所有数据如下:


            x_data = ["20{}年".format(i) for i in range(16,21)]
            y_data = list(random.randint(100,300) for i in range(5))
            y2_data = list(random.randint(100,300) for i in range(5))

            再添加一次pyplot.bar方法,添加bottom属性


            plt.bar(x_data,y_data,lw=0.5,fc="r",label="Phone")
            plt.bar(x_data,y2_data,lw=0.5,fc="b",label="Android",bottom=y_data)

            Python用 matplotlib 绘制柱状图

            4. 并列柱状图

            在绘制并列的柱状图中,要控制好每个柱状体的位置和大小可以使用width属性

            • width: 设置每组柱状体的宽度

            • x轴:x轴的宽度每组直接也要设置好

            例如继续改造上面案例,我们为bar1和bar2添加了width属性后,单独设置x轴并排的宽度为0.3


            x_width = range(0,len(x_data))
            x2_width = [i+0.3 for i in x_width]

            plt.bar(x_width,y_data,lw=0.5,fc="r",width=0.3,label="Phone")
            plt.bar(x2_width,y2_data,lw=0.5,fc="b",width=0.3,label="Android")

            plt.xticks(range(0,5),x_data)

            Python用 matplotlib 绘制柱状图

            5. 水平柱状图

            柱状图中,有时候需要让柱状图水平放置,比较差异,我们这时候需要使用到barh方法

            • pyplot.barh(y,width):绘制水平柱状图

            • 结合上述案例,改用barh方法


            x_data = ["20{}年".format(i) for i in range(16,21)]
             y_data = list(random.randint(100,300) for i in range(5))
             y2_data = list(random.randint(100,300) for i in range(5))

            x_width = range(0,len(x_data))
             x2_width = [i+0.3 for i in x_width]

            plt.barh(x_width,y_data,lw=0.5,fc="r",height=0.3,label="Phone")
             plt.barh(x2_width,y2_data,lw=0.5,fc="b",height=0.3,label="Android")
             plt.yticks(range(0,5),x_data)

            plt.legend()

            plt.title("销量分析")
             plt.ylabel("年份")
             plt.xlabel("销量")

            plt.show()

            Python用 matplotlib 绘制柱状图

            6. 添加折线柱状图

            我们在查看柱状图时,有时候会需要辅助折线来查看

            • 使用pyplot.plot()方法汇总折线图

            • 同时使用pyplot.text()显示坐标值

            • 当堆叠图时,需要计算好折线相对位置


            plt.plot(x_data,y_data,color="pink",linestyle="--")

            plt.plot(x_data, y2_data+200, color="skyblue", linestyle="-.")

            # 柱状图
            plt.bar(x_data,y_data,lw=0.5,fc="r",width=0.3,label="Phone",alpha=0.5)
            plt.bar(x_data,y2_data, lw=0.5, fc="b", width=0.3, label="Android",alpha=0.5,bottom=y_data)

            for i,j in zip(x_data,y_data):

            plt.text(i,j+0.05,"%d"%j,ha="center",va="bottom")

            for i2,j2 in zip(x_data,y2_data):

            plt.text(i2,j2+180,"%d"%j2,ha="center",va="bottom")

            Python用 matplotlib 绘制柱状图

            7. 正负柱状图

            我们需要使用Axes对象来设置坐标轴的位置

            • 首先使用pyplot.gca()方法创建axes对象

            • 然后使用matplotlib.spines模块调用set_position设置坐标轴位置

            • set_position 设置轴位置点

            • spines[]选项有"left"|"bottom"|"width"|"height"

            • set_position 值格式为(位置类型,数量);位置类型;"outward"|"axes"|"data"|;数量:中心->("轴",0.5),零->("数据",0.0)


            y_data = np.random.randint(100, 300,5)
            y2_data = np.random.randint(100, 300,5)

            ax = plt.gca()
            ax.spines["bottom"].set_position(('data', 0))

            plt.bar(x_data,+y_data,lw=0.5,fc="r",width=0.3,label="Phone")
            plt.bar(x_data,-y2_data, lw=0.5, fc="b", width=0.3, label="Android")

            for i,j in zip(x_data,y_data):

            plt.text(i,j,"%d"%j,ha="center",va="top")

            for i2,j2 in zip(x_data,y2_data):

            plt.text(i2,-j2,"%d"%j2,ha="center",va="bottom")

            Python用 matplotlib 绘制柱状图

            总结:
            本文我们atplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。

            来源:https://juejin.cn/post/7030008027373633573

            标签:Python,matplotlib,绘制,柱状图
            0
            投稿

            猜你喜欢

          • Oracle学习笔记(四)

            2012-01-05 18:57:33
          • 使用python 对验证码图片进行降噪处理

            2022-01-27 23:02:16
          • 详解Vue使用命令行搭建单页面应用

            2024-04-10 10:24:03
          • Python利用re模块实现简易分词(tokenization)

            2021-06-12 20:07:59
          • WEB界面设计五种特征

            2010-03-16 12:34:00
          • 如何在Python中引用其他模块

            2022-09-26 23:30:21
          • python 爬虫 实现增量去重和定时爬取实例

            2022-01-26 01:01:37
          • python实现层次聚类的方法

            2023-05-03 22:26:13
          • Python中的bytes类型用法及实例分享

            2022-12-19 01:50:42
          • ASP 相关文章或者相关产品

            2011-03-30 11:12:00
          • js实现无刷新监听URL的变化示例代码详解

            2024-04-17 09:43:16
          • windows server 2003+IIS6 出现 'ASP 不正常,因为执行请求

            2010-05-07 11:02:00
          • mysql SELECT语句去除某个字段的重复信息

            2024-01-17 04:15:41
          • Python中字典(dict)合并的四种方法总结

            2022-08-28 00:40:56
          • 教你使用Python的pygame模块实现拼图游戏

            2022-06-28 03:20:20
          • mysql 主从服务器的简单配置

            2009-09-06 12:06:00
          • Python 设计模式中命令模式

            2022-10-14 20:28:36
          • 解析PyCharm Python运行权限问题

            2021-04-05 03:52:51
          • Python 判断奇数偶数的方法

            2023-03-03 18:16:31
          • Python使用tkinter写一个本地密码管理器

            2022-09-19 13:05:53
          • asp之家 网络编程 m.aspxhome.com