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

如何在Chart.js中实现X轴绘制日期时间但仅显示带星期的日期?

刚好之前处理过类似的需求,要实现这种「X轴显示带星期的日期,但数据点按精确时分秒定位」的效果,核心是让X轴刻度按天对齐,但数据点的位置完全由原始时间决定。下面给你两种常用工具的实现方案,都能完美满足你的要求:

用Matplotlib实现静态图表方案

这种方案适合生成静态报告或论文配图,步骤清晰可控:

  • 先把你的时间数据转成datetime64类型,确保工具能识别为时间序列
  • 绘制数据点时直接用原始精确时间作为X轴,让点自动定位到正确位置
  • 自定义X轴刻度,只显示每天的起始时刻,并给刻度加上星期几的格式
  • 最后调整标签显示,避免重叠
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

# 模拟你的非固定间隔数据
data = {
    'timestamp': ['2018-02-14 18:30:00', '2018-02-15 12:00:00', '2018-02-15 22:15:00', '2018-02-17 09:45:00'],
    'value': [10, 25, 18, 30]
}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 创建画布
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制精确位置的数据点
ax.scatter(df['timestamp'], df['value'], color='crimson', s=60, edgecolor='white')

# 设置X轴:每天一个刻度,格式为「月-日 星期几」
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d (%a)'))

# 旋转标签避免重叠,添加网格提升可读性
plt.xticks(rotation=45)
ax.set_xlabel('日期(带星期)')
ax.set_ylabel('数据值')
ax.set_title('精确时间定位的时间序列数据')
plt.grid(alpha=0.3)

plt.tight_layout()
plt.show()

重点说明:这段代码里,DayLocator()确保X轴每天只显示一个刻度,DateFormatter给刻度加上了星期缩写(比如Mon、Tue),而散点图直接用datetime类型的X值,所以像2018-02-15 12:00:00这样的点,会自动定位到02-15和02-16两个刻度的正中间,完全符合你的要求。

用Plotly实现交互式图表方案

如果需要支持缩放、hover查看精确时间的交互式图表,Plotly会更友好,实现思路类似:

  • 同样先把时间转成datetime类型
  • 用散点图绘制数据,X轴绑定原始精确时间
  • 自定义X轴的刻度间隔和显示格式
import plotly.express as px
import pandas as pd

# 模拟数据
data = {
    'timestamp': ['2018-02-14 18:30:00', '2018-02-15 12:00:00', '2018-02-15 22:15:00', '2018-02-17 09:45:00'],
    'value': [10, 25, 18, 30]
}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 绘制交互式散点图
fig = px.scatter(df, x='timestamp', y='value', 
                 title='精确时间定位的时间序列数据',
                 labels={'timestamp': '日期(带星期)', 'value': '数据值'})

# 自定义X轴:每天一个刻度,显示带星期的日期
fig.update_xaxes(
    tickformat='%m-%d (%a)',
    dtick='D1',  # 强制每天一个刻度
    tickangle=45
)

# 设置hover提示,显示精确到秒的时间
fig.update_traces(hovertemplate='时间: %{x}<br>数值: %{y}')

fig.show()

重点说明:dtick='D1'指定X轴按天分隔刻度,tickformat控制显示格式,数据点的位置完全由原始时间决定。hover的时候还能看到精确到秒的时间,对于跨度30天的数据集,还能通过鼠标缩放查看局部细节,体验很好。

额外提示:不管用哪种方案,哪怕某天没有数据点,X轴依然会显示当天的标签;如果数据跨度达到30天,工具会自动适配X轴范围,不需要手动调整刻度范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:43