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
相关产品推荐
相关产品推荐

