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

Gnuplot垂直周对齐日历绘制问题求助

Gnuplot垂直周对齐日历问题修复方案

一、解决月份标签错位(缺失1月、重复12月)

  • 强制从当年1月1日初始化起始日期,避免因起始时间设置错误跳过1月:
    start_year = 2024
    start_date = strptime("%Y-%m-%d", sprintf("%d-01-01", start_year))
    
  • 用1到12的循环遍历所有月份,确保每个月仅生成一次标签,杜绝12月重复输出:
    do for [m=1:12] {
        month_start = strptime("%Y-%m-%d", sprintf("%d-%02d-01", start_year, m))
        week_num = int((month_start - start_date)/ (7*86400))
        set label strftime("%b", month_start) at -0.5, week_num center
    }
    

二、解决部分行向右偏移

  • 统一周数计算逻辑,以当年1月1日为基准计算每个日期所属周数,确保每行(每周)的y坐标唯一且连续:
    week_num = int((current_date - start_date)/ (7*86400))
    
  • 固定x轴范围为0-6(对应一周7天),每个日期的x坐标直接使用星期几的数值(如strftime("%w", d)返回0-6对应周日到周六),避免累积偏移:
    set xrange [0:6]
    day_of_week = int(strftime("%w", current_date))
    plot current_date with labels text strftime("%d", current_date) at day_of_week, week_num center
    
  • 检查并移除可能导致偏移的自定义offset设置,确保网格和坐标系统对齐。

完整示例代码

set terminal pngcairo size 800,1200
set output "vertical_aligned_calendar.png"

set xrange [0:6]
set yrange [0:53]
set grid x y
set xtics ("Sun" 0, "Mon" 1, "Tue" 2, "Wed" 3, "Thu" 4, "Fri" 5, "Sat" 6)
set ytics 1
unset key

start_year = 2024
seconds_per_day = 86400
start_date = strptime("%Y-%m-%d", sprintf("%d-01-01", start_year))
end_date = strptime("%Y-%m-%d", sprintf("%d-12-31", start_year))

# 绘制月份标签
do for [m=1:12] {
    month_start = strptime("%Y-%m-%d", sprintf("%d-%02d-01", start_year, m))
    week_num = int((month_start - start_date)/(7*seconds_per_day))
    set label strftime("%b", month_start) at -0.5, week_num center font ",10"
}

# 绘制日期
do for [d=start_date:end_date:seconds_per_day] {
    day_of_week = int(strftime("%w", d))
    week_num = int((d - start_date)/(7*seconds_per_day))
    set label strftime("%d", d) at day_of_week, week_num center font ",8"
}

plot NaN # 触发绘图渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:26