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

如何在Matplotlib同一坐标轴绘制带自定义坐标轴的潮汐时间多线图

代码修改方案

原来的错误操作有两个:

  • 将时间转为字符串后,matplotlib会将每个时间字符串视为独立的离散分类,不会按照时间的实际间隔排序排列,导致x轴顺序混乱
  • 不需要转置DataFrame,直接逐行遍历原DataFrame处理每日的两个潮汐时间即可

完整可运行的修改后代码如下:

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

# 原示例DataFrame生成逻辑保留,仅调整时间格式处理
low = ['08:20','11:50','09:44','11:12']
high = ['10:45','08:05','11:55','09:10']
# 保留完整datetime格式,统一用同一天作为基准,方便matplotlib识别时间连续属性
low = pd.to_datetime(low)
high = pd.to_datetime(high)
col_name = ['lowtide','hightide']
ind_val = pd.date_range(start='01-01-2021',periods=4)
df = pd.DataFrame(data= zip(low,high),columns=col_name,index=ind_val)

fig, ax = plt.subplots(figsize=(10,3))
# 固定y轴两个位置,分别对应lowtide、hightide
y_pos = [0, 1]
ax.set_yticks(y_pos)
ax.set_yticklabels(['lowtide', 'hightide'])

# 逐行遍历数据,每日绘制一条连线连接两个潮汐时间点
for _, row in df.iterrows():
    ax.plot([row['lowtide'], row['hightide']], y_pos, marker='o')

# 自定义x轴时间范围、刻度间隔与显示格式
ax.set_xlim(pd.to_datetime('08:00'), pd.to_datetime('12:00'))
# 如需5分钟一个刻度,将interval参数改为5即可
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=30))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:06:02