如何在Matplotlib的hlines上添加标记与数字并优化多子图仪表盘
解决Matplotlib仪表盘的两个绘图优化需求
以下是针对你需求的修改代码,同时附上关键步骤的说明:
import matplotlib.pyplot as plt import pandas as pd # 模拟数据(实际使用时替换为你的lplt数据) lplt = pd.DataFrame({'pts': [12, 25, 37, 41, 53], 'time': ['时段1', '时段2', '时段3', '时段4', '时段5']}) f, axs = plt.subplots(2, 2, figsize=(16,14)) x = lplt['pts'] y = lplt['time'] # --- 需求1:绿色hlines子图添加数字标记 --- axs[0,1].hlines(y, xmin=0, xmax=x, color='g', linewidth=2) # 遍历每个数据点,在线条末端添加数值标记 for xi, yi in zip(x, y): # 调整x偏移量避免文字与线条重叠,垂直居中对齐 axs[0,1].text(xi + 1.5, yi, f"{xi}", va='center', fontsize=11, color='darkgreen') # --- 需求2:天蓝色hlines子图调整为进度条样式 --- # 填充区域增强视觉效果 axs[1,1].fill_betweenx(y, 0, x, color='skyblue', alpha=0.4) # 绘制加粗的边框线条 axs[1,1].hlines(y, xmin=0, xmax=x, color='cornflowerblue', linewidth=3) # 添加末端标记点(可选,根据示例样式调整) axs[1,1].scatter(x, y, color='cornflowerblue', s=60, zorder=10) # 保留原有绘图逻辑 axs[1,0].barh(y, x, linewidth=2) axs[0,0].plot(y, x, marker="o", linewidth=2) # 优化子图布局,避免元素重叠 plt.tight_layout() plt.show()
关键说明:
数字标记添加:
- 通过遍历每个数据点,使用
text()方法在水平线末端右侧添加对应数值 - 调整
xi + 1.5控制文字与线条的间距,va='center'确保文字与线条垂直对齐 - 使用
darkgreen让文字与绿色线条风格统一
- 通过遍历每个数据点,使用
天蓝色子图样式调整:
- 用
fill_betweenx()填充x轴从0到目标值的区域,设置透明度让样式更柔和 - 改用
cornflowerblue作为线条颜色(比skyblue稍深)并加粗线条,增强层次感 - 可选添加
scatter()标记线条末端,进一步匹配常见的进度条示例样式 - 如果你的目标示例是其他风格(如虚线、箭头),可修改
linestyles参数(如linestyles='dashed')或替换为annotate()实现箭头标记
- 用
内容的提问来源于stack exchange,提问作者Bruno Queiroz
相关产品推荐
相关产品推荐

