我们先看下bar()的构造函数:

# Autogenerated by boilerplate.py.  Do not edit as changes will be lost.
@_copy_docstring_and_deprecators(Axes.bar)
def bar(
        x, height, width=0.8, bottom=None, *, align='center',
        data=None, **kwargs):
    return gca().bar(
        x, height, width=width, bottom=bottom, align=align,
        **({"data": data} if data is not None else {}), **kwargs)

  • x
    包含所有柱子的下标的列表

  • height
    包含所有柱子的高度值的列表

  • width
    每个柱子的宽度。可以指定一个固定值,那么所有的柱子都是一样的宽。或者设置一个列表,这样可以分别对每个柱子设定不同的宽度。

  • bottom
    纵坐标的起始值

  • align
    柱子对齐方式,有两个可选值:center和edge。center表示每根柱子是根据下标来对齐, edge则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是center。

其他可选的参数有:

  • color
    每根柱子呈现的颜色。同样可指定一个颜色值,让所有柱子呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子显示不同颜色。

  • edgecolor
    每根柱子边框的颜色。同样可指定一个颜色值,让所有柱子边框呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子的边框显示不同颜色。

  • linewidth
    每根柱子的边框宽度。如果没有设置该参数,将使用默认宽度,默认是没有边框。

  • xerr
    每根柱子顶部在横轴方向的线段。如果指定一个带有不同长度值的列表,那么柱子顶部的线段将呈现不同长度,数字越大线段越长,列表长度必须跟柱子的数量一致。

  • yerr
    每根柱子顶端在纵轴方向的线段。如果指定一个带有不同长度值的列表,那么柱子顶部的线段将呈现不同长度,,数字越大线段越长,列表长度必须跟柱子的数量一致。

  • ecolor
    设置 xerr 和 yerr 的线段的颜色。同样可以指定一个固定值或者一个列表。

继续来个小实例:

# 加载数据分析常用库
import csv
import matplotlib.pyplot as plt

filename = r'D:\learn\project\reptile\job.csv'
with open(filename) as f:
    # 创建阅读器,调用csv.reader()将前面存储的文件对象作为实参传给他
    reader = csv.reader(f)
    # 调用next()一次,将文件的第一行存储在header_now中
    header_now = next(reader)

    # 根据索引提取公司名称及薪资范围,并存储在列表中
    money = []
    for row in reader:
        money.append(row[2])

    """
    从获取的薪资范围列表中分别提取出每个公司给出的最低薪资和最高薪资,
    并将提取到的字符串转化为float格式存储
    """
    # 设置变量
    one = []
    two = []
    three = []
    four = []
    five = []

    listmoney = []
    for m in money:
        num = m.split('-')  # 通过‘-’分割
        low = num[0]  # 提取最低薪资
        high = num[1].split('万/月')[0]  # 提取最高薪资,并将后缀单位去除
        # 转化数据格式为float
        lows = float(low)
        highs = float(high)

        listmoney.append(lows)
        listmoney.append(highs)

    for i in listmoney:
        if 0 < i <= 1:
            one.append(i)
        elif 1.0 < i <= 1.5:
            two.append(i)
        elif 1.5 < i <= 2.0:
            three.append(i)
        elif 2.0 < i <= 2.5:
            four.append(i)
        elif i >= 2.5:
            five.append(i)

    """
    绘制柱状图

    """
    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 图标描述
    labels = ['0-1万/月', '1-1.5万/月', '1.5-2万/月', '2~2.5万/月', '2.5+ 万/月']
    # 对应变量
    values = [len(one), len(two), len(three), len(four), len(five)]
    print(values)

    # 图表题目
    plt.title("上海市软件测试薪资分布", fontsize=12, pad=15)

    # 各项属性
    plt.tick_params(axis='both', which='major', labelsize=10)

    plt.xlabel('薪资水平') # 横轴标签
    plt.ylabel('公司(个)') # 纵轴标签

    plt.bar(labels,values,width= 0.5,bottom= 1,color = "SkyBlue")

    # 在柱状图上显示具体数值,ha参数控制水平对齐方式,va控制垂直对齐方式
    for x,y in enumerate(values):
        plt.text(x,y+1,'%s'%y,ha = 'center',va = 'bottom',color = 'blue')

    # 显示图片
    plt.show()


显示效果:

 posted on 2021-06-16 21:03  叶叶酱  阅读(5812)  评论(0编辑  收藏  举报