如何让Matplotlib水平条形图在X轴不同位置起始?
实现Matplotlib水平条形图从指定X轴位置开始
不需要额外绘制白色段,直接用barh函数的**left参数**就能搞定,这是最简洁的方案,完全不用折腾broken_barh。
barh的left参数专门用来设置每个水平条形在X轴的起始坐标,你只需要把每个项目的「启动延迟天数」传给这个参数,条形就会自动从对应位置开始,前面的空白就是你要的延迟区间。
举个实际代码例子:
import matplotlib.pyplot as plt # 项目列表 projects = ["项目A", "项目B", "项目C", "项目D"] # 每个项目的启动延迟天数(X轴起始位置) start_delays = [0, 3, 5, 2] # 每个项目的持续时长(条形宽度) durations = [7, 5, 4, 6] y_positions = range(len(projects)) fig, ax = plt.subplots() # 核心:通过left参数指定条形的X轴起始点 ax.barh(y_positions, durations, left=start_delays, height=0.6) # 配置图表标签 ax.set_yticks(y_positions) ax.set_yticklabels(projects) ax.set_xlabel("天数") ax.set_title("项目时间进度") plt.tight_layout() plt.show()
这段代码里,start_delays就是你想要的「条形开头空白天数」,durations是项目的持续时间。运行后每个条形会从对应的X轴位置开始绘制,完美实现你的需求,比用broken_barh高效得多。
内容的提问来源于stack exchange,提问作者gerald
相关产品推荐
相关产品推荐

