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()
在上述代码中,我们使用 fontsize
、color
和 fontweight
参数来设置字体格式和颜色。同时,我们使用 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()
函数展示了如何在计数图(包括条形图和计数图)中添加顶部的计数值。我们展示了不同的自定义样式,以便您可以根据需要自定义计数值的格式和样式。通过使用本文的代码和技巧,您可以轻松地将计数值添加到您的计数图中,提高数据的可视化效果。