Matplotlib 柱状图
Matplotlib 是一个用于绘制高质量图形的 Python 库。在本文中,我们将详细介绍 Matplotlib 中的柱状图(bar)的用法和示例代码。
1. 绘制基本柱状图
首先,让我们看看如何绘制一个简单的柱状图。下面的示例代码演示了如何使用 Matplotlib 绘制一个简单的柱状图。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Basic Bar Chart')
plt.show()
Output:
在这段代码中,我们定义了 x 和 y 轴的数据,然后使用 plt.bar
函数绘制了柱状图。最终的效果是一个带有标签和标题的简单柱状图。
2. 设置柱状图颜色
你也可以通过设置 color
参数来改变柱状图的颜色。下面的示例代码演示了如何设置柱状图的颜色。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
colors = ['red', 'blue', 'green', 'purple', 'orange']
plt.bar(x, y, color=colors)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Colors')
plt.show()
Output:
在这段代码中,我们定义了一个颜色列表 colors
,并将其作为参数传递给 plt.bar
函数,从而改变了柱状图的颜色。
3. 添加图例
如果你在同一个图中绘制了多个柱状图,你可以通过添加图例来区分它们。下面的示例代码演示了如何添加图例。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y1 = [10, 20, 15, 25, 30]
y2 = [15, 25, 20, 30, 35]
plt.bar(x, y1, label='First Set')
plt.bar(x, y2, label='Second Set', alpha=0.5)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Legend')
plt.legend()
plt.show()
Output:
在这段代码中,我们使用 plt.bar
函数绘制了两组柱状图,并通过 label
参数指定了图例的内容。最后使用 plt.legend()
函数添加了图例。
4. 堆叠柱状图
除了并排显示多组柱状图,还可以将它们堆叠在一起显示。下面的示例代码演示了如何绘制堆叠柱状图。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y1 = [10, 20, 15, 25, 30]
y2 = [15, 25, 20, 30, 35]
plt.bar(x, y1, label='First Set')
plt.bar(x, y2, bottom=y1, label='Second Set')
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Stacked Bar Chart')
plt.legend()
plt.show()
Output:
在这段代码中,我们使用 bottom
参数将第二组柱状图堆叠在第一组柱状图的上方,从而创建了一个堆叠柱状图。
5. 水平柱状图
除了垂直柱状图,Matplotlib 也支持绘制水平柱状图。下面的示例代码演示了如何绘制水平柱状图。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.barh(x, y, color='skyblue')
plt.xlabel('Value')
plt.ylabel('Category')
plt.title('Horizontal Bar Chart')
plt.show()
Output:
在这段代码中,我们使用 plt.barh
函数绘制了一个水平柱状图,只需将数据传递给 barh
函数即可绘制水平柱状图。
6. 设置柱状图宽度
你可以通过设置 width
参数来改变柱状图的宽度。下面的示例代码演示了如何设置柱状图的宽度。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y, width=0.6, color='salmon')
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Custom Width')
plt.show()
Output:
在这段代码中,我们通过设置 width
参数为 0.6 来改变了柱状图的宽度。
7. 改变柱状图透明度
你可以通过设置柱状图的透明度来调整柱状图的显示效果。下面的示例代码演示了如何改变柱状图的透明度。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y, alpha=0.5)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Transparency')
plt.show()
Output:
在这段代码中,我们通过设置 alpha
参数为 0.5 来改变了柱状图的透明度。
8. 添加误差条
在柱状图中添加误差条可以展示数据的不确定性。下面的示例代码演示了如何添加误差条。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
errors = [1, 2, 0.5, 1, 1.5]
plt.bar(x, y, yerr=errors, capsize=5)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Error Bars')
plt.show()
Output:
在这段代码中,我们使用 yerr
参数添加了误差条,并设置了误差条的大小为 5。
9. 添加标签
你可以在柱状图上添加标签,展示更多信息。下面的示例代码演示了如何在柱状图上添加标签。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
for i, value in enumerate(y):
plt.text(i, value + 1, str(value), ha='center')
plt.bar(x, y)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Labels')
plt.show()
Output:
在这段代码中,我们使用 plt.text
函数在柱状图上方添加了数值标签,展示了每个柱状图的具体数值。
10. 水平堆叠柱状图
Matplotlib 也支持绘制水平堆叠柱状图。下面的示例代码演示了如何绘制水平堆叠柱状图。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y1 = [10, 20, 15, 25, 30]
y2 = [15, 25, 20, 30, 35]
plt.barh(x, y1, label='First Set')
plt.barh(x, y2, left=y1, label='Second Set')
plt.xlabel('Value')
plt.ylabel('Category')
plt.title('Horizontal Stacked Bar Chart')
plt.legend()
plt.show()
Output:
在这段代码中,我们使用 left
参数将第二组柱状图水平堆叠在第一组柱状图的左侧,从而创建了一个水平堆叠柱状图。
11. 自定义柱状图边框
你可以通过设置 edgecolor
参数来自定义柱状图的边框颜色。下面的示例代码演示了如何自定义柱状图的边框。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y, edgecolor='black')
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Custom Edge Color')
plt.show()
Output:
在这段代码中,我们通过设置 edgecolor
参数为 ‘black’ 来改变了柱状图的边框颜色为黑色。
12. 添加阴影效果
你可以通过设置 shadow
参数为 True 来给柱状图添加阴影效果。下面的示例代码演示了如何在柱状图中添加阴影。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y, color='skyblue', edgecolor='black', shadow=True)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Shadow Effect')
plt.show()
在这段代码中,我们将 shadow
参数设置为 True,为柱状图添加了阴影效果。
13. 水平柱状图带有标签
你也可以在水平柱状图上添加标签,展示更多信息。下面的示例代码演示了如何在水平柱状图上添加标签。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
for i, value in enumerate(y):
plt.text(value, i, str(value), va='center')
plt.barh(x, y, color='salmon')
plt.xlabel('Value')
plt.ylabel('Category')
plt.title('Horizontal Bar Chart with Labels')
plt.show()
Output:
在这段代码中,我们使用 plt.text
函数在水平柱状图右侧添加了数值标签,展示了每个柱状图的具体数值。
14. 添加柱状图标题
你可以通过在柱状图上方添加文本来为柱状图添加标题。下面的示例代码演示了如何添加柱状图标题。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y)
plt.text(2.5, max(y) + 5, 'Bar Chart Title', ha='center', fontsize=12)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Title')
plt.show()
Output:
在这段代码中,我们使用 plt.text
函数在柱状图上方添加了一个标题,将其居中显示在图形中。
15. 竖直柱状图带有数值标签
你可以通过在柱状图上添加数值标签来显示具体数值。下面的示例代码演示了如何在柱状图上添加数值标签。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
for i, value in enumerate(y):
plt.text(i, value + 1, str(value), ha='center')
plt.bar(x, y)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Value Labels')
plt.show()
Output:
在这段代码中,我们使用 plt.text
函数在每个柱状图上方添加了数值标签,展示了每个柱状图的具体数值。
16. 堆叠水平柱状图带有图例
你可以在堆叠水平柱状图上添加图例,方便区分每组数据。下面的示例代码演示了如何在堆叠水平柱状图上添加图例。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y1 = [10, 20, 15, 25, 30]
y2 = [15, 25, 20, 30, 35]
plt.barh(x, y1, label='First Set')
plt.barh(x, y2, left=y1, label='Second Set')
plt.xlabel('Value')
plt.ylabel('Category')
plt.title('Stacked Horizontal Bar Chart with Legend')
plt.legend()
plt.show()
Output:
在这段代码中,我们使用 left
参数将第二组柱状图水平堆叠在第一组柱状图的左侧,并添加了图例以区分每组数据。
17. 自定义柱状图宽度和颜色
你可以同时设置柱状图的宽度和颜色来自定义柱状图的显示效果。下面的示例代码演示了如何自定义柱状图的宽度和颜色。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
plt.bar(x, y, width=0.5, color='teal')
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Custom Width and Color')
plt.show()
Output:
在这段代码中,我们通过设置 width
参数为 0.5,同时设置了柱状图的颜色为 ‘teal’,自定义了柱状图的宽度和颜色。
18. 水平堆叠柱状图带有百分比标签
在水平堆叠柱状图中添加百分比标签可以帮助理解数据的比例关系。下面的示例代码演示了如何在水平堆叠柱状图上添加百分比标签。
import matplotlib.pyplot as plt
x = ['A', 'B', 'C', 'D', 'E']
y1 = [10, 20, 15, 25, 30]
y2 = [15, 25, 20, 30, 35]
total = [y1_val + y2_val for y1_val, y2_val in zip(y1, y2)]
plt.barh(x, y1, label='First Set')
plt.barh(x, y2, left=y1, label='Second Set')
for i, (y1_val, y2_val) in enumerate(zip(y1, y2)):
plt.text(y1_val/2, i, f'{y1_val/(y1_val+y2_val):.0%}')
plt.text(y1_val + y2_val/2, i, f'{y2_val/(y1_val+y2_val):.0%}')
plt.xlabel('Value')
plt.ylabel('Category')
plt.title('Horizontal Stacked Bar Chart with Percentage Labels')
plt.legend()
plt.show()
Output:
在这段代码中,我们通过计算每个柱状图的百分比并将其添加到水平堆叠柱状图中,展示了每个数据集在总和中的百分比。
19. 柱状图带有渐变颜色
你可以为柱状图设置渐变颜色,使图形更加美观和吸引人。下面的示例代码演示了如何为柱状图设置渐变颜色。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 20, 15, 25, 30]
colors = [(0.2, 0.4, 0.6), (0.7, 0.9, 0.5)] # Gradient colors
cmap = LinearSegmentedColormap.from_list("custom_cmap", colors)
plt.bar(x, y, color=cmap(range(len(x))))
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Chart with Gradient Colors')
plt.show()
Output:
在这段代码中,我们使用 LinearSegmentedColormap
来定义了两种渐变颜色,并将其应用到柱状图中,为每个柱状图设置了不同的渐变颜色。