Matplotlib 简明教程

Matplotlib - Bar Graphs

bar plot 是一种图形化数据表示,其中使用矩形条或列表示不同的类别。每条条形的高度与它所代表的值相对应。

水平轴(x 轴)通常表示需要比较的类别或组,而垂直轴(y 轴)表示与每个类别关联的值或数量。每条条形都从轴开始,并且水平或垂直延伸,具体取决于图表的朝向。

bar plot1

Bar Graphs in Matplotlib

我们可以使用 bar() 函数在 Matplotlib 中创建条形图。我们可以指定条形的类别或位置及其对应的高度。要自定义图表,我们可以使用颜色、标签和标题等其他选项。

The bar() Function

bar() 函数用于创建条形图。它需要两个主要参数:即 x 轴上的条形位置和条形的高度。

以下是 Matplotlib 中 bar() 函数的语法:

Syntax

plt.bar(x, height, width=0.8, align='center', color=None, label=None)

其中,

  1. x 是 x 轴上的条形位置。

  2. height 是条形的高度。

  3. width (optional) 是条形的宽度。默认值为 0.8。

  4. align (optional) 是条形的对齐方式。默认值为“center”。

  5. color (optional) 是条形颜色。默认值为 None,这会得到默认颜色。

  6. label (optional 是图例的标签。

让我们从绘制一个基本的垂直条形图开始。

Basic Vertical Bar Graph

在基本的垂直条形图中,我们表示数据,其中每条条形或列对应不同的类别,并且我们使用这些条形的高度来指示与该类别关联的值。

Example

在以下示例中,我们有三个类别(“类别 A”、“类别 B”、“类别 C”),其对应的值为 (15, 24, 30)。然后,我们将使用 plt.bar() 函数创建垂直条形图,其中每条条形表示其各自类别的值:

import matplotlib.pyplot as plt
categories = ['Category A', 'Category B', 'Category C']
values = [15, 24, 30]

plt.bar(categories, values, color='skyblue')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Basic Vertical Bar Graph')
plt.show()

执行上面的代码后,我们得到以下输出: -

bar plot2

Horizontal Bar Graph

在水平条形图中,我们通过沿着水平轴(x 轴)水平绘制条形来表示数据。在这种类型的图表中,我们将条形的长度与它们所代表的值关联,并且我们会沿着垂直轴(y 轴)显示类别。

Example

在这里,我们提供了三个类别(“类别 X”、“类别 Y”、“类别 Z”),其对应的值为 (40, 28, 35)。然后,我们将使用 barh() 函数创建水平条形图,其中根据其值的差异,每条条形水平延伸。我们还通过将 color 参数传给函数自定义每个条形颜色:

import matplotlib.pyplot as plt

categories = ['Category X', 'Category Y', 'Category Z']
values = [40, 28, 35]

plt.barh(categories, values, color=['green', 'orange', 'blue'])
plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Horizontal Bar Graph with Color Customization')
plt.show()

以下是上面代码的输出: -

bar plot3

Grouped Bar Graph

在分组条形图,我们堆叠多个垂直条形彼此相邻,用于不同的分类。当我们需要在不同组内比较同一子类的值时,它很有用。

Example

现在,我们提供三个分类('分类 A', '分类 B', '分类 C')和两个不同组的值(组 1 和组 2)。我们然后两次使用 bar() 函数,分别针对每一组,为每一分类并排放置条形 -

import matplotlib.pyplot as plt
import numpy as np

# Defining categories and their corresponding values for two groups
categories = ['Category A', 'Category B', 'Category C']
values1 = [15, 24, 30]
values2 = [20, 18, 25]

# Setting the width of the bars
bar_width = 0.35
# Calculating bar positions for both groups
bar_positions1 = np.arange(len(categories))
bar_positions2 = bar_positions1 + bar_width

# Creating the first set of bars (Group 1)
plt.bar(bar_positions1, values1, width=bar_width, label='Group 1', color='skyblue')
# Create the second set of bars (Group 2) next to the first set
plt.bar(bar_positions2, values2, width=bar_width, label='Group 2', color='orange')

# Adding labels to the axes
plt.xlabel('Categories')
plt.ylabel('Values')

# Adding a title to the graph
plt.title('Grouped Bar Graph')

# Displaying a legend to identify the groups
plt.legend()

# Showing the plot
plt.show()

执行上述代码,我们将得到以下输出 −

bar plot4

Stacked Bar Graph

在堆叠条形图,我们将一条条形放在另一条的上面。每条条形表示一个分类,每个分类中所有条形的总高度显示了总值。它有助于比较分类中的总值。

Example

在下面的示例中,我们的三个分类('分类 A', '分类 B', '分类 C')和两个不同组的值(组 1 和组 2)。我们使用 bar() 函数两次,但是这一次,组 2 的条形叠放在组 1 的条形。在第二个 bar() 函数中调用的 bottom 参数表示组 2 条形应该在组 1 条形结束的位置开始 -

import matplotlib.pyplot as plt
# Defining categories and values for two groups
categories = ['Category A', 'Category B', 'Category C']
values1 = [15, 24, 30]
values2 = [20, 18, 25]

# Creating the first set of bars (Group 1) without any offset
plt.bar(categories, values1, label='Group 1', color='skyblue')

# Creating the second set of bars (Group 2) plotted with 'bottom' set to the values of Group 1
# This makes Group 2 bars stacked on top of Group 1 bars
plt.bar(categories, values2, bottom=values1, label='Group 2', color='orange')

# Adding labels to the axes
plt.xlabel('Categories')
plt.ylabel('Values')

plt.title('Stacked Bar Graph')
plt.legend()
plt.show()

执行上述代码,我们将得到以下输出 −

bar plot5

Dynamically Updating a Bar Graph

在 Matplotlib 中,动态更新条形图是指实时不断改变或刷新条形图中显示的数据的过程。

此更新可基于外部因素来进行,例如实时数据流、用户交互或基础数据中的变化。

Example

在下面的示例中,我们动态更新 Matplotlib 中的条形图。我们首先创建一个新图形或激活一个已有的图形。接下来,我们使用 bar() 方法为绘制条形指定数据点和颜色。最后,我们使用 FuncAnimation() 函数来给条形高度和表面颜色添加动画 -

import numpy as np
from matplotlib import animation as animation, pyplot as plt, cm

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()

data = [1, 4, 3, 2, 6, 7, 3]
colors = ['red', 'yellow', 'blue', 'green', 'black']
bars = plt.bar(data, data, facecolor='green', alpha=0.75)

def animate(frame):
   global bars
   index = np.random.randint(1, 7)
   bars[frame].set_height(index)
   bars[frame].set_facecolor(colors[np.random.randint(0, len(colors))])

ani = animation.FuncAnimation(fig, animate, frames=len(data))

plt.show()

获得的输出如下 −

bar plot6