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

使用Matplotlib绘制带X轴偏移的航天任务水平条形图问题

解决航天任务水平条形图的X轴起始偏移问题

你需要绘制水平条形图,以航天任务的**时长(年)**为条形长度、任务成本为Y轴,同时让条形的X轴起始位置对应任务的开始年份。现有代码虽计算出了任务时长,但参数使用错误且未设置起始偏移,导致图表不符合需求。

问题代码分析

原代码存在两个核心问题:

  • plt.barh参数顺序错误:barh(y, width)的第一个参数是Y轴位置值,第二个是条形的X方向长度,你把时长(宽度)和成本(Y轴)搞反了
  • 未设置left参数,无法指定条形的X轴起始位置(即任务开始年份)

原代码:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('mission_lifetime.dat') 

length_of_mission = data['Mission_End_Year']-data['Mission_Start_Year']
cost              = data['Cost_in_millions']

plt.barh(length_of_mission, cost)

数据样例(mission_lifetime.dat):

Mission,Mission_Start_Year,Mission_End_Year,Cost_in_millions
ISO,1995,1998,615.
Herschel,2009,2013,1100.
Planck,2009,2013,700. 

修正后的代码

调整plt.barh参数逻辑,用left参数指定任务开始年份作为条形起始点,同时优化Y轴标签可读性:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('mission_lifetime.dat') 

# 计算任务时长
data['Mission_Length'] = data['Mission_End_Year'] - data['Mission_Start_Year']

# 定义Y轴位置与标签(用任务名称更直观)
y_positions = range(len(data['Mission']))
y_labels = data['Mission']

# 绘制水平条形图:Y轴为任务,宽度为时长,起始点为任务开始年份
plt.barh(y_positions, data['Mission_Length'], left=data['Mission_Start_Year'])

# 配置坐标轴与标题
plt.yticks(y_positions, y_labels)
plt.xlabel('年份')
plt.ylabel('航天任务')
plt.title('航天任务时长与成本分布')

# 优化布局并显示
plt.tight_layout()
plt.show()

关键说明

  • 通过left=data['Mission_Start_Year']让每个条形从对应任务的开始年份起画,长度为任务时长,X轴直接显示实际年份范围
  • 若需将成本作为Y轴,只需把y_positions替换为data['Cost_in_millions'],但此时Y轴为连续数值,任务会按成本高低排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:59:51