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

matplotlib/pandas绘制时间-高程散点图无显示问题咨询

核心问题

绘图失败/刻度异常的根源是Time列为字符串类型,matplotlib会将其识别为离散分类值而非连续时间轴;同时仅使用Time列缺少日期信息,跨天数据会出现时序错乱。

可直接运行的实现代码

需要先合并Date与Time列转为标准时间格式,再手动配置坐标轴刻度规则:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 读取并预处理数据
df = pd.read_csv('Area(4).txt', delimiter='\t')
df16 = df.iloc[601:696, :]
# 过滤9999无效值,加copy避免链式赋值警告
df17 = df16[df16.Value != 9999].copy()

# 合并日期、时间列,转为标准datetime时间格式
df17['obs_time'] = pd.to_datetime(
    df17['Date'] + ' ' + df17['Time'],
    format='%d %m %Y %H:%M'
)

# 初始化画布
fig, ax = plt.subplots(figsize=(10, 5))
# 绘制散点图
ax.scatter(x=df17['obs_time'], y=df17['Value'], s=25, alpha=0.8)

# 配置X轴:6小时间隔,刻度显示为「月-日 时:分」
ax.xaxis.set_major_locator(mdates.HourLocator(interval=6))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d %H:%M'))
plt.xticks(rotation=45) # 旋转刻度避免文字重叠

# 配置Y轴:2米=200厘米间隔,自动适配数据范围设置上下限
y_min = (df17['Value'].min() // 200) * 200
y_max = ((df17['Value'].max() // 200) + 1) * 200
ax.set_yticks(range(y_min, y_max + 1, 200))

# 补充坐标轴标签和网格
ax.set_xlabel('观测时间')
ax.set_ylabel('高程值 (cm)')
ax.grid(alpha=0.3, linestyle='--')

# 自动调整布局防止标签被截断
plt.tight_layout()
plt.show()

注意事项

  • 不要直接使用原始Time列作为x轴:该列仅包含时分信息,不同日期的同一时间点会被识别为同一个x坐标,导致跨天数据时序错乱,合并Date列生成完整时间戳才能保证时间顺序正确。
  • Y轴2米间隔对应步长为200:由于你的高程值单位为厘米,无需额外做单位转换,代码会自动根据数据的最大、最小值计算y轴上下限,不会出现数据截断或空白过多的问题。
  • 如果运行后无弹窗显示图表,可以在plt.show()前添加plt.savefig('elevation_scatter.png', dpi=300),直接将渲染完成的图片保存到脚本同级目录查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:15:34