Matplotlib中的条形图(Bar Chart)
条形图是数据可视化中最常用的图表类型之一,它用于显示和比较不同类别之间的数量关系。在Python的Matplotlib库中,创建条形图可以通过bar
函数实现,对于水平条形图,则可以使用barh
函数。本文将详细介绍如何使用Matplotlib创建各种条形图,并通过10-20个示例代码展示不同的用法和技巧。
基本条形图
首先,我们从最基本的条形图开始。以下是一个简单的示例,展示了如何创建一个基本的垂直条形图。
import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]
plt.bar(categories, values)
plt.title('Basic Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
Output:
水平条形图
如果你想创建一个水平的条形图,可以使用barh
函数。下面的代码展示了如何实现这一点。
import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]
plt.barh(categories, values, color='skyblue')
plt.title('Horizontal Bar Chart - how2matplotlib.com')
plt.xlabel('Values')
plt.ylabel('Categories')
plt.show()
Output:
自定义颜色和边框
你可以通过传递参数来自定义条形图的颜色、边框颜色和宽度。以下示例展示了如何进行自定义。
import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]
plt.bar(categories, values, color='lightgreen', edgecolor='black', linewidth=1)
plt.title('Custom Colors and Borders - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
Output:
多组数据
当你有多组数据需要在同一个图表中比较时,可以通过调整条形的位置来实现。以下代码展示了如何绘制两组数据的条形图。
import matplotlib.pyplot as plt
import numpy as np
categories = ['Category A', 'Category B', 'Category C']
values1 = [23, 45, 56]
values2 = [33, 28, 40]
x = np.arange(len(categories))
width = 0.4
plt.bar(x - width/2, values1, width, label='Group 1')
plt.bar(x + width/2, values2, width, label='Group 2')
plt.xticks(x, categories)
plt.title('Multiple Groups - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.legend()
plt.show()
Output:
堆叠条形图
堆叠条形图可以帮助我们比较各个类别中不同组的相对大小。以下示例代码展示了如何创建一个堆叠条形图。
import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values1 = [23, 45, 56]
values2 = [15, 30, 20]
plt.bar(categories, values1, label='Group 1')
plt.bar(categories, values2, bottom=values1, label='Group 2')
plt.title('Stacked Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.legend()
plt.show()
Output:
添加文本标签
在条形图上添加文本标签可以使图表的信息更加清晰。以下代码展示了如何在每个条形上添加值标签。
import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]
bars = plt.bar(categories, values)
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval, int(yval), ha='center', va='bottom')
plt.title('Bar Chart with Labels - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
Output:
自定义刻度标签
有时候,默认的刻度标签可能不符合我们的需求,这时可以自定义刻度标签。以下代码展示了如何进行自定义。
import matplotlib.pyplot as plt
values = [23, 45, 56]
labels = ['Category A', 'Category B', 'Category C']
custom_labels = ['Cat A - how2matplotlib.com', 'Cat B - how2matplotlib.com', 'Cat C - how2matplotlib.com']
plt.bar(labels, values)
plt.xticks(labels, custom_labels, rotation=45)
plt.title('Custom Tick Labels - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
Output:
条形图的美化
Matplotlib提供了大量的参数和方法来美化条形图,包括颜色、样式、图例和注释等。以下是一个综合示例,展示了如何创建一个美观的条形图。
import matplotlib.pyplot as plt
import numpy as np
categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]
plt.figure(figsize=(8, 4))
bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e', '#2ca02c'], edgecolor='black')
plt.title('Beautiful Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
# 添加值标签
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width() / 2, height, '%d' % int(height), ha='center', va='bottom')
plt.tight_layout()
plt.show()
Output:
通过上述示例代码,我们可以看到Matplotlib在创建条形图方面的灵活性和强大功能。无论是基本的条形图、水平条形图、自定义样式的条形图,还是更复杂的堆叠条形图和多组数据的条形图,Matplotlib都能够轻松应对。