源代码:
import matplotlib.pyplot as pltanimal_names = ['Lion', 'Gazelle', 'Cheetah']mph_speed = [50, 60, 75]fig, ax = plt.subplots()bar_container = ax.bar(animal_names, mph_speed)ax.set(ylabel='speed in MPH', title='Running speeds', ylim=(0, 80))ax.bar_label(bar_container, fmt=lambda x: f'{x * 1.61:.1f} km/h')plt.show()
源代码详解:
# 1. 导入库并设置随机种子import matplotlib.pyplot as plt# 2. 定义数据animal_names = ['Lion', 'Gazelle', 'Cheetah'] # 动物名称列表,将作为 x 轴的刻度标签。mph_speed = [50, 60, 75] # 对应的奔跑速度(单位:英里/小时,mph),分别为 50、60、75。# 3. 创建图形和坐标轴fig, ax = plt.subplots()# 4. 绘制条形图bar_container = ax.bar(animal_names, mph_speed)# x.bar() 绘制垂直条形图:# 第一个参数 animal_names 为 x 轴上的类别(位置)。# 第二个参数 mph_speed 为条形的高度(即速度值)。# 返回值 bar_container 是一个 BarContainer 对象,包含了所有绘制的条形,用于后续添加标签# 5. 设置坐标轴标签、标题和 y 轴范围ax.set(ylabel='speed in MPH', title='Running speeds', ylim=(0, 80))# ax.set() 一次性设置多个属性:# ylabel='speed in MPH':y 轴标签为“speed in MPH”(速度,单位英里/小时)。# title='Running speeds':图表标题为“Running speeds”(奔跑速度)。# ylim=(0, 80):y 轴显示范围从 0 到 80,确保所有条形(最高 75)完整显示,并留出顶部空间给数值标签。# 6. 在条形顶部添加自定义数值标签ax.bar_label(bar_container, fmt=lambda x: f'{x * 1.61:.1f} km/h')# ax.bar_label() 是 matplotlib 3.4.0 引入的方法,用于在条形上添加标签。# 第一个参数 bar_container:指定要添加标签的条形容器。# fmt 参数:可以是字符串格式(如 '%.2f')或可调用对象。这里传入一个 lambda 函数:lambda x: f'{x * 1.61:.1f} km/h'。# x 是条形的高度值(即原始速度值,单位为 mph)。# x * 1.61 将英里/小时转换为公里/小时(1 英里 ≈ 1.61 公里)。# {:.1f} 将转换后的数值保留一位小数。# 最终返回字符串,例如 50 * 1.61 = 80.5,显示为 80.5 km/h。# 因此,标签显示的不是原始 mph 值,而是转换后的 km/h 值,并附带单位“km/h”。标签默认放置在条形顶部(垂直条形图的正上方)。# 7. 显示图形plt.show()
