Vega Lite回归分析:日期轴显示与回归兼容问题
解决Vega Lite日期轴显示与回归分析兼容问题
核心思路是分离日期的数值计算和时间格式显示:将日期转换为数值型时间戳用于回归分析,同时在X轴编码中使用时间类型以显示日期格式。
修改步骤:
- 添加数据转换:把原始日期字段转换为毫秒级时间戳(数值型),供回归计算使用。
- 回归分析模块改用数值型时间戳字段进行计算。
- 所有图层的X轴编码设置为
temporal类型,确保轴显示日期格式。
修改后的完整代码
{ "title": { "anchor": "start", "align": "left", "text": "回归分析", "font": "Verdana", "fontSize": 36, "fontWeight": "bold", "fontStyle": "normal", "subtitle": "()", "subtitleFont": "Verdana", "subtitleFontSize": 18, "subtitleFontWeight": "normal", "subtitleFontStyle": "italic" }, "data": {"name": "dataset"}, "width": 900, "height": 400, "transform": [ { "calculate": "datetime(datum.Date)", "as": "DateObj" }, { "calculate": "timestamp(datum.DateObj)", "as": "DateNum" } ], "params": [ { "name": "_regression_method", "value": "polynomial", "bind": { "input": "radio", "options": [ "linear", "logarithmic", "exponential", "power", "quadratic", "polynomial" ], "name": "回归方法: " } }, { "name": "_regression_keyword", "expr": "if( _regression_method == 'linear', 'linear', if( _regression_method == 'logarithmic', 'log', if( _regression_method == 'exponential', 'exp', if( _regression_method == 'power', 'pow', if( _regression_method == 'quadratic', 'quad', if( _regression_method == 'polynomial', 'poly', 'JUNK' ))))))" } ], "layer": [ { "name": "原始数据", "mark": { "type": "line", "filled": false, "color": "Black", "tooltip": true }, "encoding": { "x": { "field": "Date", "type": "temporal", "axis": {"tickCount": 8, "format": "%Y-%m-%d"}, "title": "日期" }, "y": { "field": "Spends", "type": "quantitative", "axis": {"tickCount": 8}, "title": "金额" } } }, { "name": "回归线", "transform": [ { "regression": "Spends", "on": "DateNum", "method": { "signal": "_regression_keyword" } } ], "mark": { "type": "line", "color": "#D64550" }, "encoding": { "x": { "field": "DateNum", "type": "temporal", "axis": {"tickCount": 8, "format": "%Y-%m-%d"} }, "y": { "field": "Spends", "type": "quantitative" } } }, { "name": "回归统计值", "transform": [ { "regression": "Spends", "on": "DateNum", "method": { "signal": "_regression_keyword" }, "params": true }, { "calculate": "'R²: ' + format( datum['rSquared'], '.2f' )", "as": "R2" } ], "mark": { "type": "text", "color": "#D64550", "fontSize": 20, "align": "right", "x": {"expr": "width"}, "y": {"expr": "height * 0.1"} }, "encoding": { "text": { "type": "nominal", "field": "R2" } } } ] }
关键说明:
- 数据转换:通过
transform添加DateObj(日期对象)和DateNum(毫秒时间戳),DateNum作为数值型字段供回归计算使用。 - 回归模块:将
regression的on参数改为DateNum,确保回归分析基于数值计算。 - X轴显示:所有图层的X轴编码设置为
temporal类型,并通过format指定日期显示格式(如%Y-%m-%d),保证轴标签为日期样式。
内容的提问来源于stack exchange,提问作者William Butler
相关产品推荐
相关产品推荐

