import matplotlib.pyplot as pltimport numpy as np# Fixing random state for reproducibilitynp.random.seed(19680801)fig, ax = plt.subplots()# Example datapeople = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')y_pos = np.arange(len(people))performance = 3 + 10 * np.random.rand(len(people))error = np.random.rand(len(people))ax.barh(y_pos, performance, xerr=error, align='center')ax.set_yticks(y_pos, labels=people)ax.invert_yaxis() # labels read top-to-bottomax.set_xlabel('Performance')ax.set_title('How fast do you want to go today?')plt.show()
# 1. 导入库并设置随机种子import matplotlib.pyplot as pltimport numpy as npnp.random.seed(19680801) # 固定随机数生成器的种子,确保每次运行代码时生成的随机数相同,使结果可重复。# 2. 创建图形和坐标轴fix, ax = plt.subplots()# 3. 定义数据people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') # 一个元组,包含五个人的名字,将作为 y 轴的刻度标签y_pos = np.arange(len(people)) # 生成 [0, 1, 2, 3, 4],这些数字将作为每个条形在 y 轴上的位置(水平条形图的 y 坐标)。performance = 3 + 10 * np.random.rand(len(people))# 生成长度为 5 的随机数组,每个值在 [0,1) 范围内,乘以 10 后加上 3,使得性能值落在 [3, 13) 之间,模拟每个人的表现评分。error = np.random.rand(len(people)) # 生成长度为 5 的随机数组,每个值在 [0,1) 范围内,作为每个条形对应的误差大小(用于误差条)。# 4. 绘制水平条形图并添加误差条ax.barh(y_pos, performance, xerr=error, align='center')# ax.barh() 绘制水平条形图,条形沿 y 轴排列,长度表示数值。# 第一个参数 y_pos:每个条形的 y 坐标位置(数组)。# 第二个参数 performance:每个条形的长度(x 方向的值)。# xerr=error:为每个条形添加水平误差条,误差大小由 error 数组指定。误差条以条形末端为中心,向左右延伸 error 长度。# align='center':条形以给定的 y 坐标为中心对齐(默认行为)。# 5. 设置 y 轴刻度和标签ax.set_yticks(y_pos, labels=people)# 第一个参数 y_pos:刻度位置(即 [0,1,2,3,4])。# labels=people:每个刻度对应的标签,即人名 ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')。# 6. 反转 y 轴ax.invert_yaxis()# 将 y 轴方向反转,使得第一个人名(Tom)显示在顶部,最后一个人名(Jim)显示在底部。# 通常条形图默认第一个数据点在底部,反转后更符合从上到下的阅读习惯。# 7. 设置 x 轴标签和标题ax.set_xlabel('Performance') # 设置 x 轴标签为 "Performance"。ax.set_title('How fast do you want to go today?') # 设置图表标题为 "How fast do you want to go today?"。# 8. 显示图形plt.show()