绘制柱状图
🧩bar方法
bar()
是Matplotlib.pyplot库中用于绘制条形图(bar chart)的函数。条形图是一种常见的数据可视化图表,用于显示不同类别之间的比较。
函数签名:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, align='center', data=None, **kwargs)
主要参数:
x
: 条形图的x轴位置,通常是一个序列或数组,表示不同类别的位置。height
: 条形图的高度,通常是一个序列或数组,表示每个类别对应的数值。width
: 条形图的宽度,默认值是0.8,表示条形的宽度,可以自行调整。bottom
: 可选参数,条形图底部的位置,默认为None,即从0开始绘制,如果设置为一个序列或数组,可以在底部添加另一个条形图,用于堆叠图表。align
: 条形图的对齐方式,默认为’center’,表示在给定的x轴位置上居中绘制条形图,也可以设置为’edge’,表示在给定的x轴位置上左对齐绘制条形图。data
: 可选参数,用于绘图的数据来源,可以是一个Pandas DataFrame或其他数据结构。
除了上述主要参数外,bar()
函数还支持一系列其他参数,如颜色、标签、边框等,可以通过关键字参数进行设置,用于定制条形图的样式和显示。
示例:
import matplotlib.pyplot as plt
# 定义数据
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]
# 绘制条形图
plt.bar(categories, values)
# 添加标题和标签
plt.title('Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图表
plt.show()
这将绘制一个简单的条形图,显示不同类别的数值比较。
🎯实战:
- 使用 bar 函数可以绘制 柱状图。柱状图需要水平的 x 坐标值,以及每一个 x 坐 标值对应的 y 坐标值,从而 形成柱状的图。柱状图主要 用来纵向对比和横向对比的。例如,根据年份对销售收据进行纵向对比,x 坐标值就表示年 份,y 坐标值表示销售数据。
# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np
# 绘制柱状图
x = [1980, 1985, 1990, 1995]
x_labels = ['1980年', '1985年', '1990年', '1995年']
y = [1000, 3000, 4000, 5000]
colors = [1, 2, 3, 4, 5]
plt.bar(x, y, width=3)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.xticks(x, x_labels)
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('根据年份销量对比图')
plt.show()
# 使用bar()和barh()函数绘制柱状图
np.random.seed(0)
x = np.arange(5)
y = np.random.randint(-5, 5, 5)
print(x, y)
# 将画布分为一行两列
plt.subplot(1, 2, 1)
# 在第一列中画图
v_bar = plt.bar(x, y)
# 在第一列的画布中0位置画一条蓝线
plt.axhline(0, color='blue', linewidth=2)
plt.subplot(1, 2, 2)
# bath将y和x轴兑换, 纵轴为x轴
h_bar = plt.barh(x, y, color='red') # ta的宽度参数是height,而不是width
# 在第二列的画布中0位置处画蓝色的线
plt.axvline(0, color='red', linewidth=2)
plt.show()
# 使用bar()绘制三天中三部电影的票房变化
# 三天中三部电影的票房变化
real_names = ['千与千寻', '玩具总动员4', '黑衣人:全球追缉']
real_num1 = [5453, 7548, 6543]
real_num2 = [1840, 4013, 3421]
real_num3 = [1080, 1673, 2342]
# 生成x 第1天 第2天 第3天
x = np.arange(len(real_names))
x_label = [f'第{i + 1}天' for i in x]
# 绘制柱状图
# 设置柱的宽度
width = 0.3
plt.bar(x, real_num1, color='g', width=width, label=real_names[0])
plt.bar([i + width for i in x], real_num2, color='b', width=width, label=real_names[1])
plt.bar([i + 2 * width for i in x], real_num3, color='r', width=width, label=real_names[2])
# Matplotlib 默认情况不支持中文,可以使用以下简单的方法来解决:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# 修改x坐标
plt.xticks([i + width for i in x], x_label)
# 添加图例
plt.legend(loc='upper left', fancybox=True, framealpha=1, shadow=True, borderpad=1)
# 添加标题
plt.title('三天的票房数')
plt.show()
因为程序是单线程的, 所以同一时间只能显示一个图表, 关闭一个图表后才会弹出另外一个图表
result:
-
柱状图1
-
水平柱状图和竖直柱状图
-
票房变化柱状图