{ "capability": "origin.plot@v2", "display_name": "Origin 科研绘图", "default_enrollment": true, "output_namespace": "origin", "input_policy": { "suffixes": [".csv", ".xlsx", ".json"], "max_count": 16, "max_bytes": 104857600, "max_total_bytes": 536870912 }, "outputs": { "project": { "filename": "project.opju", "media_type": "application/x-origin-project", "relative_path": "project.opju", "publish": true, "required": false }, "figure_png": { "filename": "figure.png", "media_type": "image/png", "relative_path": "figure.png", "publish": true, "required": false }, "figure_svg": { "filename": "figure.svg", "media_type": "image/svg+xml", "relative_path": "figure.svg", "publish": true, "required": false }, "figure_pdf": { "filename": "figure.pdf", "media_type": "application/pdf", "relative_path": "figure.pdf", "publish": true, "required": false }, "plot_spec": { "filename": "plot-spec.json", "media_type": "application/json", "relative_path": ".meta/plot-spec.json", "publish": false, "required": true }, "provenance": { "filename": "provenance.json", "media_type": "application/json", "relative_path": ".meta/provenance.json", "publish": false, "required": true } }, "feature_path": ["operation", "plot", "type"], "features": { "line": "0.5.0", "scatter": "0.5.0", "line_scatter": "0.5.0", "column": "0.5.0", "bar": "0.5.0", "grouped_column": "0.5.0", "y_error": "0.5.0", "contour": "0.5.0", "surface_3d": "0.5.0", "ternary": "0.5.0", "heatmap": "0.5.0", "multi_panel": "0.8.1", "recipe": "0.9.0", "box": "0.7.0", "histogram": "0.7.0", "stacked_column": "0.7.0", "bubble": "0.7.0", "band": "0.7.0", "area": "0.8.0", "stacked_area": "0.8.0", "polar": "0.8.0", "pie": "0.8.0", "stacked_bar": "0.8.0" }, "summary": { "title_path": ["operation", "plot", "title"] }, "legacy_runtime": { "detail_path": ["origin"], "slots_path": ["available_slots"], "assumed_adapter_version": "0.3.0" }, "request_schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "x-maxBytes": 262144, "required": ["schema_version", "inputs", "operation", "outputs"], "additionalProperties": false, "properties": { "schema_version": {"const": 2}, "inputs": { "type": "array", "minItems": 1, "maxItems": 16, "items": { "type": "object", "required": ["key", "artifact_id"], "additionalProperties": false, "properties": { "key": {"type": "string", "pattern": "^[a-z][a-z0-9_]{0,31}$"}, "artifact_id": {"type": "string", "format": "uuid"}, "selector": { "type": "object", "required": ["sheet"], "additionalProperties": false, "properties": { "sheet": {"type": "string", "minLength": 1, "maxLength": 128} } } } } }, "operation": { "type": "object", "required": ["plot"], "additionalProperties": false, "properties": { "plot": { "type": "object", "required": ["type"], "additionalProperties": false, "properties": { "type": { "enum": [ "line", "scatter", "line_scatter", "column", "bar", "grouped_column", "y_error", "contour", "surface_3d", "ternary", "heatmap", "multi_panel", "recipe", "box", "histogram", "stacked_column", "bubble", "band", "area", "stacked_area", "polar", "pie", "stacked_bar" ] }, "series": { "type": "array", "minItems": 1, "maxItems": 16, "uniqueItems": true, "items": { "type": "object", "required": ["input"], "additionalProperties": false, "properties": { "input": {"type": "string", "pattern": "^[a-z][a-z0-9_]{0,31}$"}, "x": {"type": "string", "minLength": 1, "maxLength": 128}, "y": {"type": "string", "minLength": 1, "maxLength": 128}, "z": {"type": "string", "minLength": 1, "maxLength": 128}, "size": {"type": "string", "minLength": 1, "maxLength": 128}, "lower": {"type": "string", "minLength": 1, "maxLength": 128}, "upper": {"type": "string", "minLength": 1, "maxLength": 128}, "y_error": {"type": "string", "minLength": 1, "maxLength": 128}, "label": {"type": "string", "minLength": 1, "maxLength": 200}, "style": {"$ref": "#/$defs/series_style"} } } }, "layout": { "type": "object", "required": ["rows", "columns"], "additionalProperties": false, "properties": { "rows": {"type": "integer", "minimum": 1, "maximum": 2}, "columns": {"type": "integer", "minimum": 1, "maximum": 2}, "share_x": {"type": "boolean"}, "share_y": {"type": "boolean"} } }, "panels": { "type": "array", "minItems": 1, "maxItems": 4, "items": {"$ref": "#/$defs/panel"} }, "recipe_version": {"const": 1}, "template": {"const": "publication_double_column"}, "title": {"type": "string", "maxLength": 500}, "title_style": {"$ref": "#/$defs/text_style"}, "canvas": { "type": "object", "required": ["width_mm", "height_mm"], "additionalProperties": false, "properties": { "width_mm": {"type": "number", "minimum": 40, "maximum": 1000}, "height_mm": {"type": "number", "minimum": 40, "maximum": 1000} } }, "x_axis": {"$ref": "#/$defs/axis"}, "y_axis": {"$ref": "#/$defs/axis"}, "z_axis": {"$ref": "#/$defs/axis"}, "legend": { "type": "object", "additionalProperties": false, "properties": { "enabled": {"type": "boolean"}, "position": { "enum": ["auto", "top_left", "top_right", "bottom_left", "bottom_right"], "description": "图例位置;单图支持固定四角,多面板由 Origin 自动避开数据(包括兼容旧请求中的四角值)。" }, "font_size": {"type": "number", "minimum": 6, "maximum": 72} } }, "error_bars": {"type": "null"} }, "allOf": [ { "if": {"properties": {"type": {"enum": ["multi_panel", "recipe"]}}}, "then": { "required": ["layout", "panels"], "not": {"required": ["series"]} }, "else": { "required": ["series"], "not": { "anyOf": [ {"required": ["layout"]}, {"required": ["panels"]} ] } } }, { "if": {"properties": {"type": {"const": "recipe"}}}, "then": {"required": ["recipe_version"]}, "else": {"not": {"required": ["recipe_version"]}} }, { "if": {"properties": {"type": {"enum": ["contour", "surface_3d", "ternary", "heatmap"]}}}, "then": { "properties": { "series": { "maxItems": 1, "items": { "required": ["input", "x", "y", "z"], "not": {"anyOf": [ {"required": ["y_error"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"const": "y_error"}}}, "then": { "properties": { "series": { "items": { "required": ["input", "x", "y", "y_error"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"const": "grouped_column"}}}, "then": { "properties": { "series": { "minItems": 2, "items": { "required": ["input", "x", "y"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"enum": [ "line", "scatter", "line_scatter", "column", "bar", "area", "polar", "pie" ]}}}, "then": { "properties": { "series": { "items": { "required": ["input", "x", "y"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"enum": ["box", "histogram"]}}}, "then": { "properties": { "series": { "items": { "required": ["input", "y"], "not": {"anyOf": [ {"required": ["x"]}, {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"enum": [ "stacked_column", "stacked_area", "stacked_bar" ]}}}, "then": { "properties": { "series": { "minItems": 2, "items": { "required": ["input", "x", "y"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["size"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"const": "bubble"}}}, "then": { "properties": { "series": { "items": { "required": ["input", "x", "y", "size"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["lower"]}, {"required": ["upper"]} ]} } } } } }, { "if": {"properties": {"type": {"const": "band"}}}, "then": { "properties": { "series": { "items": { "required": ["input", "x", "y", "lower", "upper"], "not": {"anyOf": [ {"required": ["z"]}, {"required": ["y_error"]}, {"required": ["size"]} ]} } } } } }, { "if": {"properties": {"type": {"enum": ["polar", "pie"]}}}, "then": { "not": {"anyOf": [ {"required": ["x_axis"]}, {"required": ["y_axis"]}, {"required": ["z_axis"]} ]} } } ] } } }, "outputs": { "type": "array", "minItems": 1, "maxItems": 4, "uniqueItems": true, "items": { "oneOf": [ { "type": "object", "required": ["key", "type", "format"], "additionalProperties": false, "properties": { "key": {"const": "project"}, "type": {"const": "project"}, "format": {"const": "opju"} } }, { "type": "object", "required": ["key", "type", "format"], "additionalProperties": false, "properties": { "key": {"const": "figure_png"}, "type": {"const": "figure"}, "format": {"const": "png"}, "options": { "type": "object", "required": ["dpi"], "additionalProperties": false, "properties": {"dpi": {"type": "integer", "minimum": 72, "maximum": 1200}} } } }, { "type": "object", "required": ["key", "type", "format"], "additionalProperties": false, "properties": { "key": {"const": "figure_svg"}, "type": {"const": "figure"}, "format": {"const": "svg"} } }, { "type": "object", "required": ["key", "type", "format"], "additionalProperties": false, "properties": { "key": {"const": "figure_pdf"}, "type": {"const": "figure"}, "format": {"const": "pdf"} } } ] } } }, "$defs": { "axis": { "type": "object", "description": "坐标轴设置。使用对数刻度时应根据数据显式提供正数 minimum 和 maximum,以保证可复现的显示范围。", "additionalProperties": false, "properties": { "title": {"type": "string"}, "unit": {"type": "string"}, "scale": {"enum": ["linear", "log10", "ln", "log2"]}, "minimum": {"type": "number"}, "maximum": {"type": "number"}, "major_step": {"type": "number", "exclusiveMinimum": 0}, "tick_label_angle": {"type": "number", "minimum": -180, "maximum": 180}, "tick_label_font_size": {"type": "number", "minimum": 6, "maximum": 72}, "title_font_size": {"type": "number", "minimum": 6, "maximum": 72}, "grid": {"enum": ["none", "major", "major_minor"]} } }, "text_style": { "type": "object", "additionalProperties": false, "properties": { "font_size": {"type": "number", "minimum": 6, "maximum": 72} } }, "series_style": { "type": "object", "additionalProperties": false, "properties": { "color": {"type": "string", "pattern": "^#[0-9A-Fa-f]{6}$"}, "line_width": {"type": "number", "minimum": 0.1, "maximum": 20}, "line_style": {"enum": ["solid", "dash", "dot", "dash_dot", "dash_dot_dot"]}, "symbol": {"enum": ["circle", "square", "triangle_up", "diamond", "cross", "plus"]}, "symbol_size": {"type": "number", "minimum": 1, "maximum": 100}, "transparency": {"type": "integer", "minimum": 0, "maximum": 100} } }, "panel_series": { "type": "object", "required": ["input", "x", "y", "kind"], "additionalProperties": false, "properties": { "input": {"type": "string", "pattern": "^[a-z][a-z0-9_]{0,31}$"}, "x": {"type": "string", "minLength": 1, "maxLength": 128}, "y": {"type": "string", "minLength": 1, "maxLength": 128}, "x_error": {"type": "string", "minLength": 1, "maxLength": 128}, "y_error": {"type": "string", "minLength": 1, "maxLength": 128}, "kind": {"enum": ["line", "scatter", "line_scatter", "column", "bar"]}, "y_axis": {"enum": ["left", "right"]}, "label": {"type": "string", "minLength": 1, "maxLength": 200}, "style": {"$ref": "#/$defs/series_style"} } }, "panel": { "type": "object", "required": ["key", "series"], "additionalProperties": false, "properties": { "key": {"type": "string", "pattern": "^[a-z][a-z0-9_]{0,31}$"}, "series": { "type": "array", "minItems": 1, "maxItems": 16, "uniqueItems": true, "items": {"$ref": "#/$defs/panel_series"} }, "panel_label": {"type": "string", "minLength": 1, "maxLength": 20}, "title": { "type": "string", "maxLength": 500, "description": "面板上方标题;它不替代 y_axis.title。需要纵轴名称和单位时应同时设置 y_axis。" }, "title_style": {"$ref": "#/$defs/text_style"}, "x_axis": {"$ref": "#/$defs/axis"}, "y_axis": { "$ref": "#/$defs/axis", "description": "左纵轴设置。科研多面板图应显式提供 title 和 unit,避免使用数据列名或兼容性回退标题。" }, "right_y_axis": {"$ref": "#/$defs/axis"}, "legend": { "type": "object", "additionalProperties": false, "properties": { "enabled": {"type": "boolean"}, "position": { "enum": ["auto", "top_left", "top_right", "bottom_left", "bottom_right"], "description": "图例位置;单图支持固定四角,多面板由 Origin 自动避开数据(包括兼容旧请求中的四角值)。" }, "font_size": {"type": "number", "minimum": 6, "maximum": 72} } } } } } } }