Python绘制柱状图的方法与示例

1、插件安装

安装两种插件

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

2、普通柱状图

柱状图绘制步骤

  • 导入matplotlib.pyplot模块
  • 准备数据,可以使用numpy/pandas整理数据
  • 调用pyplot.bar()绘制柱状图
  • 上代码

    import numpy as np
    import matplotlib.pyplot as plt
    import random
    
    # 准备数据
    x_data = [f"20{i}年" for i in range(16, 21)]
    y_data = [random.randint(100, 300) for i in range(6)]
    
    # 正确显示中文和负号
    plt.rcParams["font.sans-serif"] = ["SimHei"]
    plt.rcParams["axes.unicode_minus"] = False
    
    # 画图,plt.bar()可以画柱状图
    for i in range(len(x_data)):
    	plt.bar(x_data[i], y_data[i])
    # 设置图片名称
    plt.title("销量分析")
    # 设置x轴标签名
    plt.xlabel("年份")
    # 设置y轴标签名
    plt.ylabel("销量")
    # 显示
    plt.show()
    

    效果图

    函数解析

  • plt.bar() 用于画柱状图,还可以使用plt.plot()绘制折线图
  • plt.xlabel() plt.ylabel() 用于标注x轴、y轴
  • plt.title() 用于给图片添加标题
  • plt.legend() 用于给柱状图添加图例(注释)
  • plt.show() 用于最终展示图片
  • 3、并列柱状图

    上代码

    import matplotlib.pyplot as plt
    import numpy as np
    
    size = 5
    # 返回size个0-1的随机数
    a = np.random.random(size)
    b = np.random.random(size)
    c = np.random.random(size)
    # x轴坐标, size=5, 返回[0, 1, 2, 3, 4]
    x = np.arange(size)
    
    # 有a/b/c三种类型的数据,n设置为3
    total_width, n = 0.8, 3
    # 每种类型的柱状图宽度
    width = total_width / n
    
    # 重新设置x轴的坐标
    x = x - (total_width - width) / 2
    print(x)
    
    # 画柱状图
    plt.bar(x, a, width=width, label="a")
    plt.bar(x + width, b, width=width, label="b")
    plt.bar(x + 2*width, c, width=width, label="c")
    # 显示图例
    plt.legend()
    # 显示柱状图
    plt.show()
    

    效果图

    扩展功能

  • 功能1:使用plt.xticks()代码可以把0, 1, ...替换成第1组, 第2组...
  • 功能2:显示具体的数字在柱状图中,可以在plt.legend()前添加plt.text()代码
  • 代码如下:

    # 功能1
    x_labels = ["第1组", "第2组", "第3组", "第4组", "第5组"]
    # 用第1组...替换横坐标x的值
    plt.xticks(x, x_labels)
    
    # 功能2
    for i, j in zip(x, a):
        plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=7)
    for i, j in zip(x + width, b):
        plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=7)
    for i, j in zip(x + 2 * width, c):
        plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=7)
    

    效果图:

    函数解析

  • plt.xticks(ticks=None, labels=None) ticks表示将要标注的标签的坐标轴位置,labels表示要替换成的标签名称
  • plt.text(x, y, s, fontdict=None, **kwargs) x, y表示坐标位置,s表示要写入的字符串
  • 扩展功能:保存文件

    直接上代码

    plt.savefig(fname="./test.png", dpi=100)
    

    函数解析

  • plt.savefig() 用于保存图片
  • fname 保存的图片文件的名称
  • dpi 保存图片的分辨率
  • 注意:该方法不能在plt.show()后面,否则保存为空图片

  • 参考文章:
    https://www.jb51.net/article/230809.htm#_label3
    https://blog.csdn.net/qq_39691492/article/details/119422424

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python绘制柱状图的方法与示例

    发表评论