在Python的数据可视化场景中,使用matplotlib库的bar()函数绘制柱状图是非常常见的操作,通过合理设置参数可以轻松实现分类数据的对比展示,还能自定义柱子的颜色让图表更清晰易读。

bar()函数基础用法
bar()函数是matplotlib.pyplot模块中用于绘制柱状图的核心函数,最基础的调用只需要传入x轴位置和柱子高度两个参数。下面是一个最简单的单分类柱状图示例:
import matplotlib.pyplot as plt
# 分类标签
categories = ['A', 'B', 'C', 'D']
# 对应数值
values = [12, 18, 9, 15]
# 绘制柱状图
plt.bar(categories, values)
plt.title('单分类柱状图')
plt.xlabel('分类')
plt.ylabel('数值')
plt.show()
用bar()实现分类对比图
要实现多分类数据的对比,需要手动调整不同分类柱子的x轴位置,避免柱子重叠。通常的做法是给每个分类的柱子设置一个偏移量,让它们并排显示。
假设我们有两组分类数据需要对比,实现代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 分类标签
categories = ['A', 'B', 'C', 'D']
# 两组数据
values1 = [12, 18, 9, 15]
values2 = [10, 20, 12, 13]
# 将分类标签转换为数值位置
x = np.arange(len(categories))
# 柱子宽度
width = 0.35
# 绘制第一组柱子,位置向左偏移width/2
plt.bar(x - width/2, values1, width, label='分类1')
# 绘制第二组柱子,位置向右偏移width/2
plt.bar(x + width/2, values2, width, label='分类2')
# 设置x轴刻度标签
plt.xticks(x, categories)
plt.title('双分类对比柱状图')
plt.xlabel('分类')
plt.ylabel('数值')
plt.legend()
plt.show()
bar()函数颜色设置方法
bar()函数提供了多种颜色设置方式,可以根据需求选择不同的设置方法。
1. 全局单色设置
通过color参数可以给所有柱子设置统一的颜色,支持颜色名称、十六进制颜色码等格式:
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [12, 18, 9, 15]
# 设置所有柱子为蓝色
plt.bar(categories, values, color='blue')
# 也可以用十六进制颜色码
# plt.bar(categories, values, color='#FF5733')
plt.title('单色柱状图')
plt.show()
2. 每个柱子不同颜色
给color参数传入一个颜色列表,列表长度需要和柱子数量一致,就可以给每个柱子设置不同的颜色:
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [12, 18, 9, 15]
# 每个柱子对应一个颜色
colors = ['red', 'green', 'blue', 'orange']
plt.bar(categories, values, color=colors)
plt.title('多色柱状图')
plt.show()
3. 按分类映射颜色
如果是多分类对比的场景,可以给每个分类固定一个颜色,让不同组的同一分类柱子颜色一致,提升图表可读性:
import matplotlib.pyplot as plt
import numpy as np
categories = ['A', 'B', 'C', 'D']
values1 = [12, 18, 9, 15]
values2 = [10, 20, 12, 13]
x = np.arange(len(categories))
width = 0.35
# 每个分类对应的颜色
category_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']
# 绘制第一组柱子,颜色按分类取
plt.bar(x - width/2, values1, width, color=category_colors, label='分类1')
# 绘制第二组柱子,颜色按分类取
plt.bar(x + width/2, values2, width, color=category_colors, label='分类2')
plt.xticks(x, categories)
plt.title('按分类映射颜色的对比柱状图')
plt.legend()
plt.show()
常见问题说明
- 如果柱子之间的间距不合适,可以调整
width参数,数值越小柱子越窄,间距越大 - 颜色参数还支持RGB元组格式,比如
(0.1, 0.2, 0.5),每个数值范围是0到1 - 如果需要给柱子添加数值标签,可以遍历柱子对象,用
text()方法在柱子顶部添加对应数值
通过上述方法,就可以灵活使用bar()函数绘制出满足需求的分类对比柱状图,并且自定义合适的颜色样式,适配不同的数据展示场景。