数据可视化 —— 堆形图应用(大全)

一、案例一:温度堆积图

python 复制代码
# 导入 matplotlib 库中的 pyplot 模块,这个模块提供了类似于 MATLAB 的绘图接口,
# 方便我们创建各种类型的可视化图表,比如折线图、柱状图、散点图等
import matplotlib.pyplot as plt
# 导入 numpy 库,它是 Python 中用于科学计算的基础库,提供了强大的多维数组对象和各种数学函数,
# 能高效地处理数值数据,在后续的绘图中可用于生成和处理坐标轴数据
import numpy as np

# 创建一个新的图形窗口,该函数的参数解释如下:
# num='堆形图':设置图形窗口的标题为 '堆形图',方便我们识别当前打开的图形
# figsize=(12, 7):指定图形的大小,单位为英寸,这里图形的宽度为 12 英寸,高度为 7 英寸
# facecolor='w':设置图形窗口的背景颜色为白色,'w' 是白色的缩写
plt.figure(num='堆形图', figsize=(12, 7), facecolor='w')

# matplotlib 默认的字体可能无法正确显示中文,所以我们通过修改 rcParams 参数来更改字体。
# 'font.sans-serif' 是用来指定无衬线字体的参数,这里将其设置为 'KaiTi'(楷体),
# 这样在绘制图形时,中文就能正常显示了
plt.rcParams['font.sans-serif'] = 'KaiTi'
# 设置图形中文字的字体大小为 15,这样可以让图形中的文字清晰易读
plt.rcParams['font.size'] = 15
# 在默认情况下,matplotlib 可能无法正确显示负号,将 'axes.unicode_minus' 参数设置为 False,
# 可以解决负号显示的问题,确保负号能在图形中正常显示
plt.rcParams['axes.unicode_minus'] = False

# 定义 x 轴的数据,使用 numpy 的 array 函数创建一个一维数组,数组元素为字符串类型,
# 代表 5 个月份,后续会作为柱状图的 x 轴刻度
x = np.array(['1', '2', '3', '4', '5'])
# 定义最高温度的数据,同样使用 numpy 的 array 函数创建一维数组,
# 数组元素为整数类型,代表每个月对应的最高温度值
y1 = np.array([10, 8, 7, 11, 13])
# 定义最低温度的数据,创建一维数组,数组元素为整数类型,
# 代表每个月对应的最低温度值
y2 = np.array([9, 6, 5, 10, 12])

# 定义误差数据,是一个列表,列表中的元素代表每个月最低温度数据的误差范围,
# 在绘制柱状图时,会使用这些误差数据来绘制误差线,以展示数据的不确定性
error = [2, 1, 2.5, 2, 1.5]

# 定义柱状图的宽度,这里设置为 0.3,它会影响柱状图在 x 轴上的宽窄程度
bar_width = 0.3

# 设置图形的标题,标题内容为 '5 个月的温度堆积柱形图',让读者一眼就能知道这个图形所展示的内容
plt.title('5个月的温度堆积柱形图')
# 设置 x 轴的标签,标签内容为 '月份',明确 x 轴数据所代表的含义
plt.xlabel('月份')
# 设置 y 轴的标签,标签内容为 '温度',明确 y 轴数据所代表的含义
plt.ylabel('温度')

# 使用 for 循环遍历 x 和 y1 数据,zip 函数将 x 和 y1 中对应的元素一一配对,
# 每次循环取出一个月份和对应的最高温度值
for a, b in zip(x, y1):
    # 在每个最高温度柱状图的上方添加文本标签,用于显示具体的温度值。
    # plt.text 函数的参数解释如下:
    # a:文本标签的 x 坐标位置,即对应的月份
    # b + 1:文本标签的 y 坐标位置,在最高温度值的基础上向上偏移 1 个单位,使标签不与柱状图重叠
    # '%d' % b:将最高温度值格式化为整数形式的字符串,作为文本标签的内容
    # ha='center':设置文本的水平对齐方式为居中对齐,使标签在柱状图上方居中显示
    # va='center':设置文本的垂直对齐方式为居中对齐
    plt.text(a, b + 1, '%d' % b, ha='center', va='center')
# 绘制最高温度的柱状图,plt.bar 函数的参数解释如下:
# x:柱状图的 x 轴位置,即月份
# y1:柱状图的高度,即最高温度值
# width=bar_width:柱状图的宽度,使用之前定义的 bar_width 值
plt.bar(x, y1, width=bar_width)

# 同样使用 for 循环遍历 x 和 y2 数据,将每个月份和对应的最低温度值配对
for a, b in zip(x, y2):
    # 在每个最低温度柱状图的上方添加文本标签,显示具体的温度值。
    # b - 1:文本标签的 y 坐标位置,在最低温度值的基础上向下偏移 1 个单位
    # va='baseline':设置文本的垂直对齐方式为基线对齐
    plt.text(a, b - 1, '%d' % b, ha='center', va='baseline')
# 绘制最低温度的柱状图,使其堆积在最高温度柱状图的上方。
# plt.bar 函数的参数解释如下:
# x:柱状图的 x 轴位置,即月份
# y2:柱状图的高度,即最低温度值
# bottom=y1:指定柱状图的底部位置,将最低温度柱状图堆积在最高温度柱状图上方
# width=bar_width:柱状图的宽度
# yerr = error:为柱状图添加误差线,误差范围由 error 列表指定
plt.bar(x, y2, bottom=y1, width=bar_width, yerr=error)

# 为图形添加图例,图例用于说明图形中不同元素所代表的含义。
# 传入一个列表 ['最高温度', '最低温度'],分别对应之前绘制的最高温度和最低温度柱状图。
# shadow=True:为图例添加阴影效果,使其更具立体感
# fancybox=True:将图例的边框设置为圆角样式,让图例外观更美观
plt.legend(['最高温度', '最低温度'], shadow=True, fancybox=True)
# 显示绘制好的图形,调用该函数后,图形窗口会弹出显示绘制的温度堆积柱状图
plt.show()

二、案例二:公司各部支出

python 复制代码
import matplotlib.pyplot as plt
import pandas as pd


plt.figure(num='图', figsize=(12, 6), facecolor='w')


plt.rcParams['font.sans-serif'] = 'KaiTi'


df = pd.read_excel('某公司各部门1---2月份实际支出.xlsx')

# 从 DataFrame 中提取 '部门' 列的数据,作为柱状图的 x 轴标签
x = df['部门']

# 定义误差棒的高度,这是一个列表,列表中的每个元素对应每个部门的误差值,后续绘制柱状图时会用到这些误差值来绘制误差棒
error = [1000, 200, 150, 100, 100, 500, 1000, 880]

# 定义柱状图的宽度,该值会影响柱状图在 x 轴上的宽窄程度
bar_width = 0.4


plt.title('某公司各部门1---2月份实际支出簇状柱形图', fontsize=20, fontproperties='SimHei')


plt.ylabel('实际支出(元)', fontsize=15)

# 使用 for 循环遍历 x 轴标签、1 月数据和 2 月数据,zip 函数将这三个序列中的对应元素一一配对
for a, b, c in zip(x, df['1月'], df['2月']):
    # 在每个 1 月支出柱状图的中间位置添加文本标签,显示具体的支出值
    # a:文本标签的 x 坐标位置,即部门名称对应的位置
    # b / 2:文本标签的 y 坐标位置,在 1 月支出值的一半高度处
    # '%d' % b:将 1 月支出值格式化为整数形式的字符串,作为文本标签的内容
    # ha='center':设置文本的水平对齐方式为居中对齐
    # va='center':设置文本的垂直对齐方式为居中对齐
    plt.text(a, b / 2, '%d' % b, ha='center', va='center')
    # 在每个 2 月支出柱状图的中间位置添加文本标签,显示具体的支出值
    # b + c / 2:文本标签的 y 坐标位置,在 1 月和 2 月支出总和的一半高度处
    plt.text(a, b + c / 2, '%d' % c, ha='center', va='center')

# 绘制 1 月支出的柱状图
# x:柱状图的 x 轴位置,即部门名称
# df['1月']:柱状图的高度,即 1 月各部门的实际支出值
# width=bar_width:柱状图的宽度
# color='g':设置柱状图的颜色为绿色
plt.bar(x, df['1月'], width=bar_width, color='g')

# 绘制 2 月支出的柱状图,使其堆积在 1 月支出柱状图的上方
# x:柱状图的 x 轴位置,即部门名称
# df['2月']:柱状图的高度,即 2 月各部门的实际支出值
# bottom=df['1月']:指定柱状图的底部位置,将 2 月支出柱状图堆积在 1 月支出柱状图上方
# yerr=error:为柱状图添加误差棒,误差范围由 error 列表指定
# width=bar_width:柱状图的宽度
# color='salmon':设置柱状图的颜色为鲑鱼色
plt.bar(x, df['2月'], bottom=df['1月'],  yerr=error, width=bar_width, color='salmon')

# 为图形添加图例,说明不同颜色的柱状图所代表的含义
# ['1月', '2月']:传入一个列表,分别对应 1 月和 2 月支出的柱状图
plt.legend(['1月', '2月'])

# 将绘制好的图形保存为图片文件,文件名为 '某公司堆图.png'
plt.savefig('某公司堆图.png')

# 显示绘制好的图形,调用该函数后,图形窗口会弹出显示绘制的柱状图
plt.show()

三、案例三:不同产品销售额

python 复制代码
import matplotlib.pyplot as plt
import pandas as pd


plt.figure(num='图', figsize=(12, 8), facecolor='w')

# 设置 matplotlib 使用的字体为楷体,以确保图形中的中文能正常显示,因为默认字体可能无法正确显示中文
plt.rcParams['font.sans-serif'] = 'KaiTi'
# 解决负号显示问题,默认情况下 matplotlib 可能无法正确显示负号,将该参数设置为 False 可解决此问题
plt.rcParams['axes.unicode_minus'] = False

df = pd.read_excel('不同产品各季度的销售额.xlsx')
# 从 DataFrame 中提取 '季度' 列的数据,作为柱状图的 x 轴标签
x = df['季度']
# 从 DataFrame 中提取 '产品A' 列的数据,作为产品 A 的销售额数据
y1 = df['产品A']
# 从 DataFrame 中提取 '产品B' 列的数据,作为产品 B 的销售额数据
y2 = df['产品B']
# 从 DataFrame 中提取 '产品C' 列的数据,作为产品 C 的销售额数据
y3 = df['产品C']


plt.title('不同产品各季度的销售额', fontsize=20)

plt.ylabel('销售额(元)', fontsize=14)

plt.ylim(0, 12000)



# 定义柱状图的宽度,该值会影响柱状图在 x 轴上的宽窄程度
bar_width = 0.3


plt.bar(x, y3, width=bar_width)
plt.bar(x, y2, bottom=y3, width=bar_width)
plt.bar(x, y1, bottom=y2, width=bar_width)

# 使用 for 循环遍历 x 轴标签、产品 C、产品 B 和产品 A 的销售额数据,zip 函数将这四个序列中的对应元素一一配对
for a, b, c, d in zip(x, y3, y2, y1):
    # 在产品 C 销售额柱状图的中间位置添加文本标签,显示具体的销售额值
    # a:文本标签的 x 坐标位置,即季度对应的位置
    # b / 2:文本标签的 y 坐标位置,在产品 C 销售额值的一半高度处
    # '%d' % b:将产品 C 销售额值格式化为整数形式的字符串,作为文本标签的内容
    # ha='center':设置文本的水平对齐方式为居中对齐
    plt.text(a, b / 2, '%d' % b, ha='center')
    # 在产品 B 销售额柱状图的中间位置添加文本标签,显示具体的销售额值
    # b + c / 2:文本标签的 y 坐标位置,在产品 C 和产品 B 销售额总和的一半高度处
    plt.text(a, b + c / 2, '%d' % c, ha='center')
    # 在产品 A 销售额柱状图的中间位置添加文本标签,显示具体的销售额值
    # b + c + d / 2:文本标签的 y 坐标位置,在产品 C、产品 B 和产品 A 销售额总和的一半高度处
    plt.text(a, b + c + d / 2, '%d' % d, ha='center')


plt.legend(['产品A', '产品B', '产品C'], shadow=True, fancybox=True)

plt.show()
相关推荐
vibag2 分钟前
Parser输出解析器
python·语言模型·langchain·大模型
njsgcs14 分钟前
基于vlm+ocr+yolo的一键ai从模之屋下载模型
人工智能·python·yolo·ocr·vlm
laplace012315 分钟前
Part 4. LangChain 1.0 Agent 开发流程(Markdown 笔记)
前端·javascript·笔记·python·语言模型·langchain
TonyLee01719 分钟前
测试数据集
python
啃火龙果的兔子26 分钟前
Pyglet开发游戏流程详解
python·游戏·pygame
古城小栈35 分钟前
PyO3 库全介绍
python·rust
技术工小李43 分钟前
2026马年年会“接福袋”游戏
python
0思必得01 小时前
[Web自动化] Requests模块请求参数
运维·前端·python·自动化·html
计算机毕设指导61 小时前
基于微信小程序的个性化漫画阅读推荐系统【源码文末联系】
java·python·微信小程序·小程序·tomcat·maven·intellij-idea
百锦再1 小时前
开发抖音小程序组件大全概述
人工智能·python·ai·小程序·aigc·notepad++·自然语言