ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

matplotlib(6)-水平柱状图

matplotlib(6)-水平柱状图

横向柱状图的核心函数是plt.barh()

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

1.水平柱状图与垂直柱状图的区别

1.1. 核心函数区别

  • 垂直柱状图plt.bar()
  • 水平柱状图plt.barh()(h = horizontal)

1.2. 坐标轴对应关系(最关键)

垂直柱状图plt.bar(x, height)

  • x:横轴(类别 / 位置)
  • height:柱子高度(纵轴数值)
  • 柱子是竖直向上

水平柱状图plt.barh(y, width)

  • y:纵轴(类别 / 位置)
  • width:柱子长度(横轴数值)
  • 柱子是水平向右

2.绘制水平柱状图参数

2.1.必选参数

参数说明
y柱形对应的 y 轴标签 / 位置(可以是类别字符串、数值序列,如['A','B','C']
width柱形的长度(即 x 轴数值,决定柱子的长短)

2.2.常用可选参数

参数说明
height柱形的宽度(横向显示时,控制柱子的 “粗细”,默认0.8
left柱形的起始 x 坐标(用于堆叠图,默认0
align柱形在 y 轴上的对齐方式,可选'center'(默认)或'edge'
color柱形填充颜色(可以是单一颜色,也可以是颜色列表)
edgecolor柱形边框颜色
linewidth柱形边框宽度
label图例标签(用于多组数据对比)

3.绘制横向柱状图

3.1基础绘制

import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei']#用黑体显示中文 plt.rcParams['axes.unicode_minus'] = False#解决负号异常 data = ['苹果','香蕉','橙子','葡萄'] sales = [120,90,80,150] plt.barh(data,sales,color='r',height=0.5)#color颜色英文首字母,height宽度 plt.title('水果销量对比', fontsize=14)#标题 plt.xlabel('销量(件)', fontsize=12)#x轴标签 plt.ylabel('水果种类', fontsize=12)#y轴标签 plt.show()

图片展示:

3.2水平堆叠柱状图

import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei']#用黑体显示中文 plt.rcParams['axes.unicode_minus'] = False#解决负号异常 data = ['苹果','香蕉','橙子','葡萄'] sales = [120,90,80,150] tar_sales = [150,50,40,130] plt.barh(data,sales,color='r',height=0.5,label="超市") plt.barh(data,tar_sales,color='b',height=0.5,label="目标") plt.title('水果销量(距目标)', fontsize=14)#标题 plt.xlabel('销量(件)', fontsize=12)#x轴标签 plt.ylabel('水果种类', fontsize=12)#y轴标签 plt.legend()# 显示图例(关键:区分两种超市),没有这个显示不了label plt.show()

图片展示:

3.3水平分组柱状图

import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文 plt.rcParams['axes.unicode_minus'] = False # 解决负号异常 data = ['苹果','香蕉','橙子','葡萄'] sales = [120,90,80,150] sales2 = [150,50,40,130] # 1. 生成数字形式的Y轴基准位置(替代直接用字符串data) y_pos = np.arange(len(data)) # 2. 定义单组柱子的粗细(建议0.3~0.4,避免重叠) bar_height = 0.35 # 3. 两组柱子分别向基准位置上下偏移,实现并列 plt.barh(y_pos - bar_height/2, sales, color='r', height=bar_height, label="超市1") plt.barh(y_pos + bar_height/2, sales2, color='b', height=bar_height, label="超市2") # 4. 把Y轴的数字位置替换回原始水果类别字符串 plt.yticks(y_pos, data) # ----------------------------------------------- plt.title('水果销量', fontsize=14)#标题 plt.xlabel('销量(件)', fontsize=12)#x轴标签 plt.ylabel('水果种类', fontsize=12)#y轴标签 plt.legend() plt.show()

图片展示:

返回列表