You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

关键说明:

  1. 数字标记添加:

    • 通过遍历每个数据点,使用text()方法在水平线末端右侧添加对应数值
    • 调整xi + 1.5控制文字与线条的间距,va='center'确保文字与线条垂直对齐
    • 使用darkgreen让文字与绿色线条风格统一
  2. 天蓝色子图样式调整:

    • 用fill_betweenx()填充x轴从0到目标值的区域,设置透明度让样式更柔和
    • 改用cornflowerblue作为线条颜色(比skyblue稍深)并加粗线条,增强层次感
    • 可选添加scatter()标记线条末端,进一步匹配常见的进度条示例样式
    • 如果你的目标示例是其他风格(如虚线、箭头),可修改linestyles参数(如linestyles='dashed')或替换为annotate()实现箭头标记

内容的提问来源于stack exchange,提问作者Bruno Queiroz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:45:26