Matplotlib如何在计数图上显示条形图顶部的计数值?

Matplotlib如何在计数图上显示条形图顶部的计数值?

在数据可视化中,Matplotlib 是一个非常常用的 Python 库。它可以创建多种类型的图表,其中包括条形图和计数图。但是,在某些情况下,可能需要在条形图或计数图的顶部显示计数值。这可以帮助读者更清楚地了解数据,并使图表更加直观。那么,在 Matplotlib 中如何实现呢?

1. 创建计数图

首先,我们需要创建一个计数图。在这里,我们使用 Matplotlib 中的 hist() 函数创建一个由 100 个随机数字组成的计数图示例。

import numpy as np
import matplotlib.pyplot as plt

# 创建随机数列
x = np.random.randn(100)

# 绘制计数图
plt.hist(x)
plt.show()

执行上述代码,将生成一张简单的计数图。然而,它没有显示条形图顶部的计数值。

2. 显示条形图的计数值

接下来,我们需要使用 Matplotlib 中的 text() 函数将计数值添加到条形图的顶部。

import numpy as np
import matplotlib.pyplot as plt

# 创建随机数列
x = np.random.randn(100)

# 绘制计数图
n, bins, patches = plt.hist(x)

# 显示每个条形图的计数值
for patch in patches:
    # 获取条形图高度
    height = patch.get_height()
    # 获取条形图宽度
    width = patch.get_width()
    # 获取条形图位置
    x, y = patch.get_xy()
    # 在条形图顶部居中显示计数值
    plt.text(x+width/2, y+height+0.1, int(height), ha='center') 
plt.show()

在上述代码中,我们首先使用 hist() 函数生成计数图。然后,我们使用 plt.text() 函数将计数值添加到每个条形图的顶部。其中,get_height()get_width()get_xy() 函数可以用来获取条形图的高度、宽度和位置。最后,我们使用 ha='center' 参数将计数值居中对齐。此时,执行代码,您将获得一个带有条形图计数值的计数图。

3. 自定义条形图计数值

除了默认形式的计数值,我们还可以通过多种方式自定义条形图顶部的计数值。以下是一些示例:

显示百分比

我们可以将条形图的计数值调整为百分比形式。

import numpy as np
import matplotlib.pyplot as plt

# 创建随机数列
x = np.random.randint(1, 6, size=100)

# 绘制计数图
n, bins, patches = plt.hist(x)

# 显示每个条形图的计数值
for patch in patches:
    # 获取条形图高度
    height = patch.get_height()
    # 获取条形图宽度
    width = patch.get_width()
    # 获取条形图位置
    x, y = patch.get_xy()
    # 计算百分比
    percent = round(100 * height / sum(n),2)
    # 在条形图顶部居中显示百分比
    plt.text(x+width/2, y+height+0.1, f'{percent}%', ha='center') 
plt.show()

在上述代码中,我们首先创建一个由 100 个 1-5 之间的整数组成的随机数字序列。然后,我们使用 hist() 函数和 get_height() 函数创建一个计数图。接着,我们使用 sum() 函数计算出总数,并将 height 值转换为百分比形式。最后,我们使用 f'{percent}%' 来显示百分比形式的计数值。现在我们执行代码,我们可以看到条形图的计数值已经被转换为百分比形式。

修改字体和颜色

我们还可以通过修改字体和颜色来自定义条形图的计数值。以下是一个示例:

import numpy as np
import matplotlib.pyplot as plt

# 创建随机数列
x = np.random.randint(1, 6, size=100)

# 绘制计数图
n, bins, patches = plt.hist(x)

# 显示每个条形图的计数值
for patch in patches:
    # 获取条形图高度
    height = patch.get_height()
    # 获取条形图宽度
    width = patch.get_width()
    # 获取条形图位置
    x, y = patch.get_xy()
    # 设置字体和颜色
    plt.text(x+width/2, y+height+0.1, int(height), ha='center', fontsize=10, color='white', fontweight='bold', bbox=dict(facecolor='black', edgecolor='none', alpha=0.7))
plt.show()

在上述代码中,我们使用 fontsizecolorfontweight 参数来设置字体格式和颜色。同时,我们使用 bbox 参数来设置计数值文本框的样式。在此示例中,我们将文本颜色设置为白色,使用黑色背景框,并且将文本字体加粗。执行代码后,我们可以看到计数值已经按照我们定制的样式呈现了出来。

修改数值格式

Matplotlib 的 text() 函数中可以使用格式代码来改变文本显示的样式。所以我们可以借助于其中的格式代码,例如 {:.2f} 来将计数值保留两位小数。以下是示例代码:

import numpy as np
import matplotlib.pyplot as plt

# 创建随机数列
x = np.random.randn(100)

# 绘制计数图
n, bins, patches = plt.hist(x)

# 显示每个条形图的计数值
for patch in patches:
    # 获取条形图高度
    height = patch.get_height()
    # 获取条形图宽度
    width = patch.get_width()
    # 获取条形图位置
    x, y = patch.get_xy()
    # 在条形图顶部居中显示计数值
    plt.text(x+width/2, y+height+0.1, '{:.2f}'.format(height), ha='center') 
plt.show()

在上述代码中,我们合并了两个方法来进行格式化。首先定义字符串的 .format()方法在文本中输入 {:.2f} 对计数值进行保留两位小数的格式化,随后在 text() 函数的文本参数中传入格式化后的计数值。这里保留两位小数只是示例,您可以根据实际需求进行更改。

结论

在本文中,我们使用 Matplotlib 中的 hist() 函数和 text() 函数展示了如何在计数图(包括条形图和计数图)中添加顶部的计数值。我们展示了不同的自定义样式,以便您可以根据需要自定义计数值的格式和样式。通过使用本文的代码和技巧,您可以轻松地将计数值添加到您的计数图中,提高数据的可视化效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程