diff --git a/eslint.config.js b/eslint.config.js index b98192d..ba2914d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -100,6 +100,17 @@ export default tseslint.config( rules: {}, }, + // + // evaluations scripts file linting + // + { + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + // after all eslint plugins configs to override, see https://github.com/prettier/eslint-config-prettier // @ts-ignore prettierConfig, diff --git a/evaluations/.gitignore b/evaluations/.gitignore new file mode 100644 index 0000000..35ca8f4 --- /dev/null +++ b/evaluations/.gitignore @@ -0,0 +1,8 @@ +# tools +node_modules +.DS_Store + +# assets +package-lock.json +config.local.json + diff --git a/evaluations/README.md b/evaluations/README.md new file mode 100644 index 0000000..131724b --- /dev/null +++ b/evaluations/README.md @@ -0,0 +1,19 @@ +## knowledge evaluation + +## 生成提示词 + +```bash +npm run prompt +``` + +## 生成测评数据 + +```bash +npm run eval:data column +``` + +## 生成指标 + +```bash +npm run eval:metrics column +``` diff --git a/evaluations/config.json b/evaluations/config.json new file mode 100644 index 0000000..7bfa54b --- /dev/null +++ b/evaluations/config.json @@ -0,0 +1,7 @@ +{ + "agent": { + "url": "https://chat.your-agent.com", + "headers": {}, + "data": {} + } +} diff --git a/evaluations/datastes/chart/line/eval.json b/evaluations/datastes/chart/line/eval.json new file mode 100644 index 0000000..9eee587 --- /dev/null +++ b/evaluations/datastes/chart/line/eval.json @@ -0,0 +1,430 @@ +[ + { + "type": "text2chart", + "question": "某市的平均气温在2018年为15度,2019年上升至17度,2020年又下降到16度。请使用折线图来展示这一变化趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":15},{\"time\":\"2019年\",\"value\":17},{\"time\":\"2020年\",\"value\":16}],\"title\": \"某市平均气温变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均气温(度)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":15},{\"time\":\"2019年\",\"value\":17},{\"time\":\"2020年\",\"value\":16}],\"title\":\"某市平均气温变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均气温(摄氏度)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 基础概念", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "一个城市过去五年来的年度降雨量分别是:2016年800毫米,2017年900毫米,2018年700毫米,2019年1000毫米,2020年1100毫米。使用折线图描绘这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2016年\",\"value\":800},{\"time\":\"2017年\",\"value\":900},{\"time\":\"2018年\",\"value\":700},{\"time\":\"2019年\",\"value\":1000},{\"time\":\"2020年\",\"value\":1100}],\"title\": \"年度降雨量变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"降雨量(毫米)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2016年\",\"value\":800},{\"time\":\"2017年\",\"value\":900},{\"time\":\"2018年\",\"value\":700},{\"time\":\"2019年\",\"value\":1000},{\"time\":\"2020年\",\"value\":1100}],\"title\":\"城市年度降雨量变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"降雨量(毫米)\"}", + "reference": ["折线图 - Line Chart 基础概念", "面积图 - Area Chart 使用示例"] + }, + { + "type": "text2chart", + "question": "某公司的股价在过去一年中经历了波动:年初时每股价格为50元,年中跌至40元,年底回升到55元。通过折线图来展示该公司股价的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"年初\",\"value\":50},{\"time\":\"年中\",\"value\":40},{\"time\":\"年底\",\"value\":55}],\"title\":\"公司股价变化\",\"axisXTitle\":\"时间点\",\"axisYTitle\":\"股价(元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"年初\",\"value\":50},{\"time\":\"年中\",\"value\":40},{\"time\":\"年底\",\"value\":55}],\"title\":\"公司股价变动\",\"axisXTitle\":\"时间\",\"axisYTitle\":\"股价(元/股)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "记录显示某地区每年新增就业人数如下:2017年增加了5000人,2018年增加了7000人,2019年增加了6000人。请利用折线图展示这一信息。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":5000},{\"time\":\"2018年\",\"value\":7000},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"某地区新增就业人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"新增就业人数(人)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":5000},{\"time\":\"2018年\",\"value\":7000},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"新增就业人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"新增就业人数(人)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart" + ] + }, + { + "type": "text2chart", + "question": "某产品的销量随季节变化明显:春季销售了10万台,夏季销售了15万台,秋季销售了12万台,冬季销售了8万台。请以折线图形式展现该产品各季节销量情况。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"春季\",\"value\":10},{\"time\":\"夏季\",\"value\":15},{\"time\":\"秋季\",\"value\":12},{\"time\":\"冬季\",\"value\":8}],\"title\": \"产品各季节销量变化\",\"axisXTitle\": \"季节\",\"axisYTitle\": \"销量(万台)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"春季\",\"value\":100000},{\"time\":\"夏季\",\"value\":150000},{\"time\":\"秋季\",\"value\":120000},{\"time\":\"冬季\",\"value\":80000}],\"title\":\"产品季节性销量\",\"axisXTitle\":\"季节\",\"axisYTitle\":\"销量(台)\"}", + "reference": [ + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "一项研究表明,随着年龄的增长,人们对社交媒体的兴趣逐渐减少:18岁时有90%的人经常使用社交媒体;到了25岁这个比例降至80%;而到了30岁则进一步降到70%。请绘制一条折线图来表示这种趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":18,\"value\":90},{\"time\":25,\"value\":80},{\"time\":30,\"value\":70}],\"title\":\"年龄与社交媒体使用率\",\"axisXTitle\":\"年龄\",\"axisYTitle\":\"社交媒体使用率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"18岁\",\"value\":90},{\"time\":\"25岁\",\"value\":80},{\"time\":\"30岁\",\"value\":70}],\"title\":\"社交媒体使用兴趣随年龄变化\",\"axisXTitle\":\"年龄\",\"axisYTitle\":\"经常使用比例(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 基础概念", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 基础概念" + ] + }, + { + "type": "text2chart", + "question": "某电商平台每月订单数量统计结果如下:一月份订单数为10万单,二月份为12万单,三月份回落至11万单。请采用折线图方式呈现该电商平台前三个月订单数量的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"一月份\",\"value\":10},{\"time\":\"二月份\",\"value\":12},{\"time\":\"三月份\",\"value\":11}],\"title\": \"电商平台订单数量变化\",\"axisXTitle\": \"月份\",\"axisYTitle\": \"订单数量(万单)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"一月份\",\"value\":100000},{\"time\":\"二月份\",\"value\":120000},{\"time\":\"三月份\",\"value\":110000}],\"title\":\"电商平台订单数量变化\",\"axisXTitle\":\"月份\",\"axisYTitle\":\"订单数量(单)\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "鱼骨图 - Fishbone Diagram 使用示例", + "数据文本 - Text 使用示例" + ] + }, + { + "type": "text2chart", + "question": "近年来我国智能手机用户数量持续增长:2018年底达到7亿户,2019年底增至7.5亿户,2020年底更是突破了8亿大关。请构建一张折线图来反映这一增长态势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年底\",\"value\":700000000},{\"time\":\"2019年底\",\"value\":750000000},{\"time\":\"2020年底\",\"value\":800000000}],\"title\": \"我国智能手机用户数量增长\",\"axisXTitle\": \"时间\",\"axisYTitle\": \"用户数量(户)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年底\",\"value\":70000},{\"time\":\"2019年底\",\"value\":75000},{\"time\":\"2020年底\",\"value\":80000}],\"title\":\"智能手机用户数量增长\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"用户数量(万户)\"}", + "reference": ["饼图 - Pie Chart 使用示例", "折线图 - Line Chart"] + }, + { + "type": "text2chart", + "question": "根据最新的健康调查报告,成年人每日平均步行步数有所下降:2017年的平均水平是7000步,2018年降到了6500步,到了2019年进一步减少至6000步。请用折线图来表示这种趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":7000},{\"time\":\"2018年\",\"value\":6500},{\"time\":\"2019年\",\"value\":6000}],\"title\": \"成年人每日平均步行步数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均步数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":7000},{\"time\":\"2018年\",\"value\":6500},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"成年人每日平均步行步数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均步数(步)\"}", + "reference": ["[WIP]双轴图 - DualAxes Chart 基础概念", "折线图 - Line Chart 基础概念"] + }, + { + "type": "text2chart", + "question": "过去五年内,某城市的平均气温分别为:2018 年 15°C,2019 年 16°C,2020 年 15°C,2021 年 17°C,2022 年 18°C。用折线图可视化这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":15},{\"time\":\"2019 年\",\"value\":16},{\"time\":\"2020 年\",\"value\":15},{\"time\":\"2021 年\",\"value\":17},{\"time\":\"2022 年\",\"value\":18}],\"title\": \"过去五年平均气温变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均气温(°C)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":15},{\"time\":\"2019 年\",\"value\":16},{\"time\":\"2020 年\",\"value\":15},{\"time\":\"2021 年\",\"value\":17},{\"time\":\"2022 年\",\"value\":18}],\"title\":\"某城市平均气温变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均气温(°C)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "点标注地图 - PinMap 适用场景" + ] + }, + { + "type": "text2chart", + "question": "从 2017 年到 2021 年,某大学的在校学生人数变化为:2017 年 3000 人,2018 年 3200 人,2019 年 3100 人,2020 年 3300 人,2021 年 3400 人。用折线图展示。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017 年\",\"value\":3000},{\"time\":\"2018 年\",\"value\":3200},{\"time\":\"2019 年\",\"value\":3100},{\"time\":\"2020 年\",\"value\":3300},{\"time\":\"2021 年\",\"value\":3400}],\"title\": \"在校学生人数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"人数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017 年\",\"value\":3000},{\"time\":\"2018 年\",\"value\":3200},{\"time\":\"2019 年\",\"value\":3100},{\"time\":\"2020 年\",\"value\":3300},{\"time\":\"2021 年\",\"value\":3400}],\"title\":\"大学在校学生人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"在校学生人数\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "某公司员工人数在近四年内的变化为:2019 年 150 人,2020 年 160 人,2021 年 155 人,2022 年 170 人。请用折线图表示。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2019 年\",\"value\":150},{\"time\":\"2020 年\",\"value\":160},{\"time\":\"2021 年\",\"value\":155},{\"time\":\"2022 年\",\"value\":170}],\"title\": \"公司员工人数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"员工人数(人)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2019 年\",\"value\":150},{\"time\":\"2020 年\",\"value\":160},{\"time\":\"2021 年\",\"value\":155},{\"time\":\"2022 年\",\"value\":170}],\"title\":\"公司员工人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"员工人数\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 基础概念" + ] + }, + { + "type": "text2chart", + "question": "某产品的季度销售量如下:Q1 为 2000 件,Q2 为 2500 件,Q3 为 2300 件,Q4 为 2600 件。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":2500},{\"time\":\"Q3\",\"value\":2300},{\"time\":\"Q4\",\"value\":2600}],\"title\": \"产品季度销售量变化\",\"axisXTitle\": \"季度\",\"axisYTitle\": \"销售量(件)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":2500},{\"time\":\"Q3\",\"value\":2300},{\"time\":\"Q4\",\"value\":2600}],\"title\":\"产品季度销售量\",\"axisXTitle\":\"季度\",\"axisYTitle\":\"销售量(件)\"}", + "reference": [ + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "在最近三年内,某国的年通货膨胀率分别为:2020 年 2.5%,2021 年 3.0%,2022 年 2.8%。使用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2020 年\",\"value\":2.5},{\"time\":\"2021 年\",\"value\":3.0},{\"time\":\"2022 年\",\"value\":2.8}],\"title\": \"通货膨胀率变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"通货膨胀率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2020 年\",\"value\":2.5},{\"time\":\"2021 年\",\"value\":3},{\"time\":\"2022 年\",\"value\":2.8}],\"title\":\"年度通货膨胀率\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"通货膨胀率(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "某项目在 2021 年的月度花费如下:一月 100 万,二月 120 万,三月 110 万,四月 130 万。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"一月\",\"value\":100},{\"time\":\"二月\",\"value\":120},{\"time\":\"三月\",\"value\":110},{\"time\":\"四月\",\"value\":130}],\"title\": \"2021年月度花费变化\",\"axisXTitle\": \"月份\",\"axisYTitle\": \"花费(万元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"一月\",\"value\":100},{\"time\":\"二月\",\"value\":120},{\"time\":\"三月\",\"value\":110},{\"time\":\"四月\",\"value\":130}],\"title\":\"项目月度花费\",\"axisXTitle\":\"月份\",\"axisYTitle\":\"花费(万元)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "某城市从 2018 年至 2020 年的空气质量指数(AQI)年平均值分别为:2018 年 75,2019 年 72,2020 年 68。使用折线图进行可视化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":75},{\"time\":\"2019 年\",\"value\":72},{\"time\":\"2020 年\",\"value\":68}],\"title\": \"某城市空气质量指数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"空气质量指数(AQI)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":75},{\"time\":\"2019 年\",\"value\":72},{\"time\":\"2020 年\",\"value\":68}],\"title\":\"空气质量指数年平均值\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"AQI\"}", + "reference": [ + "折线图 - Line Chart 使用示例", + "词云图 - WordCloud Chart 使用示例", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用多条折线图展示各国森林覆盖率的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2010\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"过去十年森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2010年\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020年\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010年\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020年\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010年\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020年\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010年\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020年\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010年\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020年\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"各国森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "词云图 - WordCloud Chart 使用示例", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用折线图展示各国森林覆盖率的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2010\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"2010-2020年森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2010年\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020年\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010年\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020年\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010年\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020年\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010年\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020年\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010年\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020年\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"各国森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用多条折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"2019年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"2020年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"2021年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"2022年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"2018年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"2019年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"2020年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"2021年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"2022年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"2018年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"2019年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"2020年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"2021年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"2022年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"过去五年中三个城市的空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"第一年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"第二年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"第三年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"第四年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"第五年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"第一年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"第二年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"第三年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"第四年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"第五年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"第一年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"第二年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"第三年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"第四年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"第五年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"城市空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "点标注地图 - PinMap 不适用场景", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"2019年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"2020年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"2021年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"2022年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"2018年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"2019年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"2020年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"2021年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"2022年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"2018年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"2019年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"2020年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"2021年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"2022年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"过去五年中三个城市的空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"第一年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"第二年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"第三年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"第四年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"第五年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"第一年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"第二年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"第三年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"第四年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"第五年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"第一年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"第二年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"第三年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"第四年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"第五年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"城市空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "点标注地图 - PinMap 不适用场景", + "面积图 - Area Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{ \"month\": \"Jan\",\"value\": 150 },{ \"month\": \"Feb\", \"value\": 200 },{ \"month\": \"Mar\" ,\"value\": 180 }]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":150},{\"time\":\"Feb\",\"value\":200},{\"time\":\"Mar\",\"value\":180}],\"axisXTitle\": \"month\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":150},{\"time\":\"Feb\",\"value\":200},{\"time\":\"Mar\",\"value\":180}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Mon\",\"value\":500},{\"day\":\"Tue\",\"value\":700},{\"day\":\"Wed\",\"value\":600},{\"day\":\"Thu\",\"value\":900},{\"day\":\"Fri\",\"value\":800}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Mon\",\"value\":500},{\"time\":\"Tue\",\"value\":700},{\"time\":\"Wed\",\"value\":600},{\"time\":\"Thu\",\"value\":900},{\"time\":\"Fri\",\"value\":800}],\"axisXTitle\": \"day\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Mon\",\"value\":500},{\"time\":\"Tue\",\"value\":700},{\"time\":\"Wed\",\"value\":600},{\"time\":\"Thu\",\"value\":900},{\"time\":\"Fri\",\"value\":800}],\"axisXTitle\":\"day\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"week\":\"1\",\"value\":1000},{\"week\":\"2\",\"value\":1500},{\"week\":\"3\",\"value\":1200},{\"week\":\"4\",\"value\":1800}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"1\",\"value\":1000},{\"time\":\"2\",\"value\":1500},{\"time\":\"3\",\"value\":1200},{\"time\":\"4\",\"value\":1800}],\"axisXTitle\": \"周数\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"1\",\"value\":1000},{\"time\":\"2\",\"value\":1500},{\"time\":\"3\",\"value\":1200},{\"time\":\"4\",\"value\":1800}],\"axisXTitle\":\"week\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000},{\"quarter\":\"Q2\",\"sales\":3000},{\"quarter\":\"Q3\",\"sales\":2500},{\"quarter\":\"Q4\",\"sales\":3500}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":3000},{\"time\":\"Q3\",\"value\":2500},{\"time\":\"Q4\",\"value\":3500}],\"title\": \"季度销售额变化\",\"axisXTitle\": \"季度\",\"axisYTitle\": \"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":3000},{\"time\":\"Q3\",\"value\":2500},{\"time\":\"Q4\",\"value\":3500}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2018,\"revenue\":5000},{\"year\":2019,\"revenue\":7000},{\"year\":2020,\"revenue\":6000},{\"year\":2021,\"revenue\":8000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":2018,\"value\":5000},{\"time\":2019,\"value\":7000},{\"time\":2020,\"value\":6000},{\"time\":2021,\"value\":8000}],\"axisXTitle\": \"year\",\"axisYTitle\": \"revenue\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":2018,\"value\":5000},{\"time\":2019,\"value\":7000},{\"time\":2020,\"value\":6000},{\"time\":2021,\"value\":8000}],\"axisXTitle\":\"year\",\"axisYTitle\":\"revenue\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"sales\":3000},{\"month\":\"Feb\",\"sales\":4500},{\"month\":\"Mar\",\"sales\":4000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":3000},{\"time\":\"Feb\",\"value\":4500},{\"time\":\"Mar\",\"value\":4000}],\"axisXTitle\": \"month\",\"axisYTitle\": \"sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":3000},{\"time\":\"Feb\",\"value\":4500},{\"time\":\"Mar\",\"value\":4000}],\"axisXTitle\":\"month\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"hour\":1,\"temperature\":30},{\"hour\":2,\"temperature\":35},{\"hour\":3,\"temperature\":32},{\"hour\":4,\"temperature\":38}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":1,\"value\":30},{\"time\":2,\"value\":35},{\"time\":3,\"value\":32},{\"time\":4,\"value\":38}],\"axisXTitle\": \"hour\",\"axisYTitle\": \"temperature\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":1,\"value\":30},{\"time\":2,\"value\":35},{\"time\":3,\"value\":32},{\"time\":4,\"value\":38}],\"axisXTitle\":\"hour\",\"axisYTitle\":\"temperature\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Monday\",\"sales\":2000},{\"day\":\"Tuesday\",\"sales\":2500},{\"day\":\"Wednesday\",\"sales\":2200},{\"day\":\"Thursday\",\"sales\":2800},{\"day\":\"Friday\",\"sales\":3000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Monday\",\"value\":2000},{\"time\":\"Tuesday\",\"value\":2500},{\"time\":\"Wednesday\",\"value\":2200},{\"time\":\"Thursday\",\"value\":2800},{\"time\":\"Friday\",\"value\":3000}],\"axisXTitle\": \"day\",\"axisYTitle\": \"sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Monday\",\"value\":2000},{\"time\":\"Tuesday\",\"value\":2500},{\"time\":\"Wednesday\",\"value\":2200},{\"time\":\"Thursday\",\"value\":2800},{\"time\":\"Friday\",\"value\":3000}],\"axisXTitle\":\"day\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"profit\":800},{\"quarter\":\"Q2\",\"profit\":1200},{\"quarter\":\"Q3\",\"profit\":1000},{\"quarter\":\"Q4\",\"profit\":1500}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":800},{\"time\":\"Q2\",\"value\":1200},{\"time\":\"Q3\",\"value\":1000},{\"time\":\"Q4\",\"value\":1500}],\"axisXTitle\": \"季度\",\"axisYTitle\": \"利润(万元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":800},{\"time\":\"Q2\",\"value\":1200},{\"time\":\"Q3\",\"value\":1000},{\"time\":\"Q4\",\"value\":1500}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"profit\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2016,\"growth\":12},{\"year\":2017,\"growth\":15},{\"year\":2018,\"growth\":10},{\"year\":2019,\"growth\":18}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":2016,\"value\":12},{\"time\":2017,\"value\":15},{\"time\":2018,\"value\":10},{\"time\":2019,\"value\":18}],\"axisXTitle\": \"year\",\"axisYTitle\": \"growth\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":2016,\"value\":12},{\"time\":2017,\"value\":15},{\"time\":2018,\"value\":10},{\"time\":2019,\"value\":18}],\"axisXTitle\":\"year\",\"axisYTitle\":\"growth\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":300,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":500,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":200,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":600,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":300,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":700,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":400,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":300,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":500,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":200,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":600,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":300,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":700,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":400,\"group\":\"C\"}],\"title\": \"Monthly Value by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":300,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":500,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":200,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":600,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":300,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":700,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":400,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2020\",\"value\":1000,\"category\":\"X\"},{\"year\":\"2020\",\"value\":1500,\"category\":\"Y\"},{\"year\":\"2020\",\"value\":900,\"category\":\"Z\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"X\"},{\"year\":\"2021\",\"value\":1900,\"category\":\"Y\"},{\"year\":\"2021\",\"value\":1100,\"category\":\"Z\"},{\"year\":\"2022\",\"value\":1800,\"category\":\"X\"},{\"year\":\"2022\",\"value\":2200,\"category\":\"Y\"},{\"year\":\"2022\",\"value\":1500,\"category\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2020\",\"value\":1000,\"group\":\"X\"},{\"time\":\"2020\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"2020\",\"value\":900,\"group\":\"Z\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"X\"},{\"time\":\"2021\",\"value\":1900,\"group\":\"Y\"},{\"time\":\"2021\",\"value\":1100,\"group\":\"Z\"},{\"time\":\"2022\",\"value\":1800,\"group\":\"X\"},{\"time\":\"2022\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"2022\",\"value\":1500,\"group\":\"Z\"}],\"title\":\"Category Values Over Years\",\"axisXTitle\":\"Year\",\"axisYTitle\":\"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2020\",\"value\":1000,\"group\":\"X\"},{\"time\":\"2020\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"2020\",\"value\":900,\"group\":\"Z\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"X\"},{\"time\":\"2021\",\"value\":1900,\"group\":\"Y\"},{\"time\":\"2021\",\"value\":1100,\"group\":\"Z\"},{\"time\":\"2022\",\"value\":1800,\"group\":\"X\"},{\"time\":\"2022\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"2022\",\"value\":1500,\"group\":\"Z\"}],\"axisXTitle\":\"year\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":200,\"product\":\"A\"},{\"date\":\"202101\",\"value\":300,\"product\":\"B\"},{\"date\":\"202101\",\"value\":100,\"product\":\"C\"},{\"date\":\"202102\",\"value\":400,\"product\":\"A\"},{\"date\":\"202102\",\"value\":500,\"product\":\"B\"},{\"date\":\"202102\",\"value\":300,\"product\":\"C\"},{\"date\":\"202103\",\"value\":600,\"product\":\"A\"},{\"date\":\"202103\",\"value\":700,\"product\":\"B\"},{\"date\":\"202103\",\"value\":400,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":200,\"group\":\"A\"},{\"time\":\"202101\",\"value\":300,\"group\":\"B\"},{\"time\":\"202101\",\"value\":100,\"group\":\"C\"},{\"time\":\"202102\",\"value\":400,\"group\":\"A\"},{\"time\":\"202102\",\"value\":500,\"group\":\"B\"},{\"time\":\"202102\",\"value\":300,\"group\":\"C\"},{\"time\":\"202103\",\"value\":600,\"group\":\"A\"},{\"time\":\"202103\",\"value\":700,\"group\":\"B\"},{\"time\":\"202103\",\"value\":400,\"group\":\"C\"}],\"title\": \"产品销售额变化\",\"axisXTitle\": \"日期\",\"axisYTitle\": \"销售额\",\"groupTitle\": \"产品\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":200,\"group\":\"A\"},{\"time\":\"202101\",\"value\":300,\"group\":\"B\"},{\"time\":\"202101\",\"value\":100,\"group\":\"C\"},{\"time\":\"202102\",\"value\":400,\"group\":\"A\"},{\"time\":\"202102\",\"value\":500,\"group\":\"B\"},{\"time\":\"202102\",\"value\":300,\"group\":\"C\"},{\"time\":\"202103\",\"value\":600,\"group\":\"A\"},{\"time\":\"202103\",\"value\":700,\"group\":\"B\"},{\"time\":\"202103\",\"value\":400,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":3000,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":1000,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":4000,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":5000,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":3000,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":6000,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":7000,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":4000,\"product\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":3000,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":1000,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":4000,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":5000,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":3000,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":6000,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":7000,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":4000,\"group\":\"Z\"}],\"title\":\"Sales by Quarter and Product\",\"axisXTitle\":\"Quarter\",\"axisYTitle\":\"Sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":3000,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":1000,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":4000,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":5000,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":3000,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":6000,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":7000,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":4000,\"group\":\"Z\"}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "流程图 - Flow Diagram 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2019\",\"value\":800,\"category\":\"A\"},{\"year\":\"2019\",\"value\":1200,\"category\":\"B\"},{\"year\":\"2019\",\"value\":700,\"category\":\"C\"},{\"year\":\"2020\",\"value\":1100,\"category\":\"A\"},{\"year\":\"2020\",\"value\":1600,\"category\":\"B\"},{\"year\":\"2020\",\"value\":900,\"category\":\"C\"},{\"year\":\"2021\",\"value\":1500,\"category\":\"A\"},{\"year\":\"2021\",\"value\":1800,\"category\":\"B\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2019\",\"value\":800,\"group\":\"A\"},{\"time\":\"2019\",\"value\":1200,\"group\":\"B\"},{\"time\":\"2019\",\"value\":700,\"group\":\"C\"},{\"time\":\"2020\",\"value\":1100,\"group\":\"A\"},{\"time\":\"2020\",\"value\":1600,\"group\":\"B\"},{\"time\":\"2020\",\"value\":900,\"group\":\"C\"},{\"time\":\"2021\",\"value\":1500,\"group\":\"A\"},{\"time\":\"2021\",\"value\":1800,\"group\":\"B\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"C\"}],\"title\": \"各年份不同类别价值变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"价值\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2019\",\"value\":800,\"group\":\"A\"},{\"time\":\"2019\",\"value\":1200,\"group\":\"B\"},{\"time\":\"2019\",\"value\":700,\"group\":\"C\"},{\"time\":\"2020\",\"value\":1100,\"group\":\"A\"},{\"time\":\"2020\",\"value\":1600,\"group\":\"B\"},{\"time\":\"2020\",\"value\":900,\"group\":\"C\"},{\"time\":\"2021\",\"value\":1500,\"group\":\"A\"},{\"time\":\"2021\",\"value\":1800,\"group\":\"B\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"year\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":600,\"product\":\"A\"},{\"date\":\"202101\",\"value\":800,\"product\":\"B\"},{\"date\":\"202101\",\"value\":400,\"product\":\"C\"},{\"date\":\"202102\",\"value\":1000,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1200,\"product\":\"B\"},{\"date\":\"202102\",\"value\":700,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1500,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1800,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":600,\"group\":\"A\"},{\"time\":\"202101\",\"value\":800,\"group\":\"B\"},{\"time\":\"202101\",\"value\":400,\"group\":\"C\"},{\"time\":\"202102\",\"value\":1000,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1200,\"group\":\"B\"},{\"time\":\"202102\",\"value\":700,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1500,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1800,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"C\"}],\"title\":\"产品销售额随时间变化\",\"axisXTitle\":\"日期\",\"axisYTitle\":\"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":600,\"group\":\"A\"},{\"time\":\"202101\",\"value\":800,\"group\":\"B\"},{\"time\":\"202101\",\"value\":400,\"group\":\"C\"},{\"time\":\"202102\",\"value\":1000,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1200,\"group\":\"B\"},{\"time\":\"202102\",\"value\":700,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1500,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1800,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "散点图 - Scatter Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":400,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":600,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":300,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":800,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":900,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1100,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":600,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":400,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":600,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":300,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":800,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":900,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1100,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":600,\"group\":\"C\"}],\"title\": \"Monthly Value Changes by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":400,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":600,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":300,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":800,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":900,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1100,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":600,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":500,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":800,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":300,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":1200,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":1500,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":900,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":1800,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":2200,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":1500,\"product\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":500,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":800,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":300,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":1200,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":900,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":1800,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":1500,\"group\":\"Z\"}],\"title\":\"产品销售额随季度变化\",\"axisXTitle\":\"季度\",\"axisYTitle\":\"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":500,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":800,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":300,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":1200,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":900,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":1800,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":1500,\"group\":\"Z\"}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "散点图 - Scatter Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":500,\"product\":\"A\"},{\"date\":\"202101\",\"value\":700,\"product\":\"B\"},{\"date\":\"202101\",\"value\":300,\"product\":\"C\"},{\"date\":\"202102\",\"value\":900,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1100,\"product\":\"B\"},{\"date\":\"202102\",\"value\":600,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1600,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1100,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":500,\"group\":\"A\"},{\"time\":\"202101\",\"value\":700,\"group\":\"B\"},{\"time\":\"202101\",\"value\":300,\"group\":\"C\"},{\"time\":\"202102\",\"value\":900,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1100,\"group\":\"B\"},{\"time\":\"202102\",\"value\":600,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1600,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1100,\"group\":\"C\"}],\"title\": \"产品销售额随时间变化\",\"axisXTitle\": \"日期\",\"axisYTitle\": \"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":500,\"group\":\"A\"},{\"time\":\"202101\",\"value\":700,\"group\":\"B\"},{\"time\":\"202101\",\"value\":300,\"group\":\"C\"},{\"time\":\"202102\",\"value\":900,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1100,\"group\":\"B\"},{\"time\":\"202102\",\"value\":600,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1600,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1100,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ] + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":700,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":900,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":400,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":1000,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":1200,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":1500,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":1300,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":700,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":900,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":400,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":1000,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":1200,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":1500,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":1300,\"group\":\"C\"}],\"title\": \"Monthly Value Changes by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":700,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":900,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":400,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":1000,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":1200,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":1500,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ] + } +] diff --git a/evaluations/datastes/chart/line/metrics.json b/evaluations/datastes/chart/line/metrics.json new file mode 100644 index 0000000..c6b77d6 --- /dev/null +++ b/evaluations/datastes/chart/line/metrics.json @@ -0,0 +1,470 @@ +[ + { + "type": "text2chart", + "question": "某市的平均气温在2018年为15度,2019年上升至17度,2020年又下降到16度。请使用折线图来展示这一变化趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":15},{\"time\":\"2019年\",\"value\":17},{\"time\":\"2020年\",\"value\":16}],\"title\": \"某市平均气温变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均气温(度)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":15},{\"time\":\"2019年\",\"value\":17},{\"time\":\"2020年\",\"value\":16}],\"title\":\"某市平均气温变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均气温(摄氏度)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 基础概念", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "一个城市过去五年来的年度降雨量分别是:2016年800毫米,2017年900毫米,2018年700毫米,2019年1000毫米,2020年1100毫米。使用折线图描绘这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2016年\",\"value\":800},{\"time\":\"2017年\",\"value\":900},{\"time\":\"2018年\",\"value\":700},{\"time\":\"2019年\",\"value\":1000},{\"time\":\"2020年\",\"value\":1100}],\"title\": \"年度降雨量变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"降雨量(毫米)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2016年\",\"value\":800},{\"time\":\"2017年\",\"value\":900},{\"time\":\"2018年\",\"value\":700},{\"time\":\"2019年\",\"value\":1000},{\"time\":\"2020年\",\"value\":1100}],\"title\":\"城市年度降雨量变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"降雨量(毫米)\"}", + "reference": ["折线图 - Line Chart 基础概念", "面积图 - Area Chart 使用示例"], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某公司的股价在过去一年中经历了波动:年初时每股价格为50元,年中跌至40元,年底回升到55元。通过折线图来展示该公司股价的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"年初\",\"value\":50},{\"time\":\"年中\",\"value\":40},{\"time\":\"年底\",\"value\":55}],\"title\":\"公司股价变化\",\"axisXTitle\":\"时间点\",\"axisYTitle\":\"股价(元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"年初\",\"value\":50},{\"time\":\"年中\",\"value\":40},{\"time\":\"年底\",\"value\":55}],\"title\":\"公司股价变动\",\"axisXTitle\":\"时间\",\"axisYTitle\":\"股价(元/股)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "记录显示某地区每年新增就业人数如下:2017年增加了5000人,2018年增加了7000人,2019年增加了6000人。请利用折线图展示这一信息。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":5000},{\"time\":\"2018年\",\"value\":7000},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"某地区新增就业人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"新增就业人数(人)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":5000},{\"time\":\"2018年\",\"value\":7000},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"新增就业人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"新增就业人数(人)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某产品的销量随季节变化明显:春季销售了10万台,夏季销售了15万台,秋季销售了12万台,冬季销售了8万台。请以折线图形式展现该产品各季节销量情况。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"春季\",\"value\":10},{\"time\":\"夏季\",\"value\":15},{\"time\":\"秋季\",\"value\":12},{\"time\":\"冬季\",\"value\":8}],\"title\": \"产品各季节销量变化\",\"axisXTitle\": \"季节\",\"axisYTitle\": \"销量(万台)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"春季\",\"value\":100000},{\"time\":\"夏季\",\"value\":150000},{\"time\":\"秋季\",\"value\":120000},{\"time\":\"冬季\",\"value\":80000}],\"title\":\"产品季节性销量\",\"axisXTitle\":\"季节\",\"axisYTitle\":\"销量(台)\"}", + "reference": [ + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "一项研究表明,随着年龄的增长,人们对社交媒体的兴趣逐渐减少:18岁时有90%的人经常使用社交媒体;到了25岁这个比例降至80%;而到了30岁则进一步降到70%。请绘制一条折线图来表示这种趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":18,\"value\":90},{\"time\":25,\"value\":80},{\"time\":30,\"value\":70}],\"title\":\"年龄与社交媒体使用率\",\"axisXTitle\":\"年龄\",\"axisYTitle\":\"社交媒体使用率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"18岁\",\"value\":90},{\"time\":\"25岁\",\"value\":80},{\"time\":\"30岁\",\"value\":70}],\"title\":\"社交媒体使用兴趣随年龄变化\",\"axisXTitle\":\"年龄\",\"axisYTitle\":\"经常使用比例(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 基础概念", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 基础概念" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某电商平台每月订单数量统计结果如下:一月份订单数为10万单,二月份为12万单,三月份回落至11万单。请采用折线图方式呈现该电商平台前三个月订单数量的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"一月份\",\"value\":10},{\"time\":\"二月份\",\"value\":12},{\"time\":\"三月份\",\"value\":11}],\"title\": \"电商平台订单数量变化\",\"axisXTitle\": \"月份\",\"axisYTitle\": \"订单数量(万单)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"一月份\",\"value\":100000},{\"time\":\"二月份\",\"value\":120000},{\"time\":\"三月份\",\"value\":110000}],\"title\":\"电商平台订单数量变化\",\"axisXTitle\":\"月份\",\"axisYTitle\":\"订单数量(单)\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "鱼骨图 - Fishbone Diagram 使用示例", + "数据文本 - Text 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "近年来我国智能手机用户数量持续增长:2018年底达到7亿户,2019年底增至7.5亿户,2020年底更是突破了8亿大关。请构建一张折线图来反映这一增长态势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年底\",\"value\":700000000},{\"time\":\"2019年底\",\"value\":750000000},{\"time\":\"2020年底\",\"value\":800000000}],\"title\": \"我国智能手机用户数量增长\",\"axisXTitle\": \"时间\",\"axisYTitle\": \"用户数量(户)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年底\",\"value\":70000},{\"time\":\"2019年底\",\"value\":75000},{\"time\":\"2020年底\",\"value\":80000}],\"title\":\"智能手机用户数量增长\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"用户数量(万户)\"}", + "reference": ["饼图 - Pie Chart 使用示例", "折线图 - Line Chart"], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "根据最新的健康调查报告,成年人每日平均步行步数有所下降:2017年的平均水平是7000步,2018年降到了6500步,到了2019年进一步减少至6000步。请用折线图来表示这种趋势。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":7000},{\"time\":\"2018年\",\"value\":6500},{\"time\":\"2019年\",\"value\":6000}],\"title\": \"成年人每日平均步行步数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均步数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017年\",\"value\":7000},{\"time\":\"2018年\",\"value\":6500},{\"time\":\"2019年\",\"value\":6000}],\"title\":\"成年人每日平均步行步数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均步数(步)\"}", + "reference": ["[WIP]双轴图 - DualAxes Chart 基础概念", "折线图 - Line Chart 基础概念"], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "过去五年内,某城市的平均气温分别为:2018 年 15°C,2019 年 16°C,2020 年 15°C,2021 年 17°C,2022 年 18°C。用折线图可视化这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":15},{\"time\":\"2019 年\",\"value\":16},{\"time\":\"2020 年\",\"value\":15},{\"time\":\"2021 年\",\"value\":17},{\"time\":\"2022 年\",\"value\":18}],\"title\": \"过去五年平均气温变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"平均气温(°C)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":15},{\"time\":\"2019 年\",\"value\":16},{\"time\":\"2020 年\",\"value\":15},{\"time\":\"2021 年\",\"value\":17},{\"time\":\"2022 年\",\"value\":18}],\"title\":\"某城市平均气温变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"平均气温(°C)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "点标注地图 - PinMap 适用场景" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "从 2017 年到 2021 年,某大学的在校学生人数变化为:2017 年 3000 人,2018 年 3200 人,2019 年 3100 人,2020 年 3300 人,2021 年 3400 人。用折线图展示。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2017 年\",\"value\":3000},{\"time\":\"2018 年\",\"value\":3200},{\"time\":\"2019 年\",\"value\":3100},{\"time\":\"2020 年\",\"value\":3300},{\"time\":\"2021 年\",\"value\":3400}],\"title\": \"在校学生人数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"人数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2017 年\",\"value\":3000},{\"time\":\"2018 年\",\"value\":3200},{\"time\":\"2019 年\",\"value\":3100},{\"time\":\"2020 年\",\"value\":3300},{\"time\":\"2021 年\",\"value\":3400}],\"title\":\"大学在校学生人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"在校学生人数\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某公司员工人数在近四年内的变化为:2019 年 150 人,2020 年 160 人,2021 年 155 人,2022 年 170 人。请用折线图表示。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2019 年\",\"value\":150},{\"time\":\"2020 年\",\"value\":160},{\"time\":\"2021 年\",\"value\":155},{\"time\":\"2022 年\",\"value\":170}],\"title\": \"公司员工人数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"员工人数(人)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2019 年\",\"value\":150},{\"time\":\"2020 年\",\"value\":160},{\"time\":\"2021 年\",\"value\":155},{\"time\":\"2022 年\",\"value\":170}],\"title\":\"公司员工人数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"员工人数\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 基础概念" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某产品的季度销售量如下:Q1 为 2000 件,Q2 为 2500 件,Q3 为 2300 件,Q4 为 2600 件。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":2500},{\"time\":\"Q3\",\"value\":2300},{\"time\":\"Q4\",\"value\":2600}],\"title\": \"产品季度销售量变化\",\"axisXTitle\": \"季度\",\"axisYTitle\": \"销售量(件)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":2500},{\"time\":\"Q3\",\"value\":2300},{\"time\":\"Q4\",\"value\":2600}],\"title\":\"产品季度销售量\",\"axisXTitle\":\"季度\",\"axisYTitle\":\"销售量(件)\"}", + "reference": [ + "矩阵树图 -Treemap Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "在最近三年内,某国的年通货膨胀率分别为:2020 年 2.5%,2021 年 3.0%,2022 年 2.8%。使用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2020 年\",\"value\":2.5},{\"time\":\"2021 年\",\"value\":3.0},{\"time\":\"2022 年\",\"value\":2.8}],\"title\": \"通货膨胀率变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"通货膨胀率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2020 年\",\"value\":2.5},{\"time\":\"2021 年\",\"value\":3},{\"time\":\"2022 年\",\"value\":2.8}],\"title\":\"年度通货膨胀率\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"通货膨胀率(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某项目在 2021 年的月度花费如下:一月 100 万,二月 120 万,三月 110 万,四月 130 万。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"一月\",\"value\":100},{\"time\":\"二月\",\"value\":120},{\"time\":\"三月\",\"value\":110},{\"time\":\"四月\",\"value\":130}],\"title\": \"2021年月度花费变化\",\"axisXTitle\": \"月份\",\"axisYTitle\": \"花费(万元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"一月\",\"value\":100},{\"time\":\"二月\",\"value\":120},{\"time\":\"三月\",\"value\":110},{\"time\":\"四月\",\"value\":130}],\"title\":\"项目月度花费\",\"axisXTitle\":\"月份\",\"axisYTitle\":\"花费(万元)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "某城市从 2018 年至 2020 年的空气质量指数(AQI)年平均值分别为:2018 年 75,2019 年 72,2020 年 68。使用折线图进行可视化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":75},{\"time\":\"2019 年\",\"value\":72},{\"time\":\"2020 年\",\"value\":68}],\"title\": \"某城市空气质量指数变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"空气质量指数(AQI)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2018 年\",\"value\":75},{\"time\":\"2019 年\",\"value\":72},{\"time\":\"2020 年\",\"value\":68}],\"title\":\"空气质量指数年平均值\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"AQI\"}", + "reference": [ + "折线图 - Line Chart 使用示例", + "词云图 - WordCloud Chart 使用示例", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用多条折线图展示各国森林覆盖率的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2010\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"过去十年森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2010年\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020年\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010年\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020年\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010年\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020年\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010年\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020年\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010年\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020年\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"各国森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "词云图 - WordCloud Chart 使用示例", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用折线图展示各国森林覆盖率的变化。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2010\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"2010-2020年森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2010年\",\"value\":20,\"group\":\"中国\"},{\"time\":\"2020年\",\"value\":25,\"group\":\"中国\"},{\"time\":\"2010年\",\"value\":20,\"group\":\"印度\"},{\"time\":\"2020年\",\"value\":23,\"group\":\"印度\"},{\"time\":\"2010年\",\"value\":60,\"group\":\"巴西\"},{\"time\":\"2020年\",\"value\":55,\"group\":\"巴西\"},{\"time\":\"2010年\",\"value\":45,\"group\":\"俄罗斯\"},{\"time\":\"2020年\",\"value\":50,\"group\":\"俄罗斯\"},{\"time\":\"2010年\",\"value\":30,\"group\":\"加拿大\"},{\"time\":\"2020年\",\"value\":30,\"group\":\"加拿大\"}],\"title\":\"各国森林覆盖率变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"森林覆盖率(%)\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 基础概念", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用多条折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"2019年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"2020年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"2021年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"2022年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"2018年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"2019年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"2020年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"2021年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"2022年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"2018年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"2019年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"2020年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"2021年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"2022年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"过去五年中三个城市的空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"第一年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"第二年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"第三年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"第四年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"第五年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"第一年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"第二年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"第三年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"第四年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"第五年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"第一年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"第二年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"第三年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"第四年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"第五年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"城市空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "点标注地图 - PinMap 不适用场景", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用折线图展示这些数据。", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2018年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"2019年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"2020年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"2021年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"2022年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"2018年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"2019年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"2020年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"2021年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"2022年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"2018年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"2019年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"2020年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"2021年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"2022年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"过去五年中三个城市的空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"第一年\",\"value\":150,\"group\":\"城市A\"},{\"time\":\"第二年\",\"value\":160,\"group\":\"城市A\"},{\"time\":\"第三年\",\"value\":145,\"group\":\"城市A\"},{\"time\":\"第四年\",\"value\":155,\"group\":\"城市A\"},{\"time\":\"第五年\",\"value\":165,\"group\":\"城市A\"},{\"time\":\"第一年\",\"value\":100,\"group\":\"城市B\"},{\"time\":\"第二年\",\"value\":110,\"group\":\"城市B\"},{\"time\":\"第三年\",\"value\":105,\"group\":\"城市B\"},{\"time\":\"第四年\",\"value\":115,\"group\":\"城市B\"},{\"time\":\"第五年\",\"value\":120,\"group\":\"城市B\"},{\"time\":\"第一年\",\"value\":90,\"group\":\"城市C\"},{\"time\":\"第二年\",\"value\":85,\"group\":\"城市C\"},{\"time\":\"第三年\",\"value\":80,\"group\":\"城市C\"},{\"time\":\"第四年\",\"value\":75,\"group\":\"城市C\"},{\"time\":\"第五年\",\"value\":70,\"group\":\"城市C\"}],\"title\":\"城市空气污染指数变化\",\"axisXTitle\":\"年份\",\"axisYTitle\":\"空气污染指数\"}", + "reference": [ + "折线图 - Line Chart 基础概念", + "点标注地图 - PinMap 不适用场景", + "面积图 - Area Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{ \"month\": \"Jan\",\"value\": 150 },{ \"month\": \"Feb\", \"value\": 200 },{ \"month\": \"Mar\" ,\"value\": 180 }]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":150},{\"time\":\"Feb\",\"value\":200},{\"time\":\"Mar\",\"value\":180}],\"axisXTitle\": \"month\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":150},{\"time\":\"Feb\",\"value\":200},{\"time\":\"Mar\",\"value\":180}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Mon\",\"value\":500},{\"day\":\"Tue\",\"value\":700},{\"day\":\"Wed\",\"value\":600},{\"day\":\"Thu\",\"value\":900},{\"day\":\"Fri\",\"value\":800}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Mon\",\"value\":500},{\"time\":\"Tue\",\"value\":700},{\"time\":\"Wed\",\"value\":600},{\"time\":\"Thu\",\"value\":900},{\"time\":\"Fri\",\"value\":800}],\"axisXTitle\": \"day\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Mon\",\"value\":500},{\"time\":\"Tue\",\"value\":700},{\"time\":\"Wed\",\"value\":600},{\"time\":\"Thu\",\"value\":900},{\"time\":\"Fri\",\"value\":800}],\"axisXTitle\":\"day\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"week\":\"1\",\"value\":1000},{\"week\":\"2\",\"value\":1500},{\"week\":\"3\",\"value\":1200},{\"week\":\"4\",\"value\":1800}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"1\",\"value\":1000},{\"time\":\"2\",\"value\":1500},{\"time\":\"3\",\"value\":1200},{\"time\":\"4\",\"value\":1800}],\"axisXTitle\": \"周数\",\"axisYTitle\": \"value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"1\",\"value\":1000},{\"time\":\"2\",\"value\":1500},{\"time\":\"3\",\"value\":1200},{\"time\":\"4\",\"value\":1800}],\"axisXTitle\":\"week\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000},{\"quarter\":\"Q2\",\"sales\":3000},{\"quarter\":\"Q3\",\"sales\":2500},{\"quarter\":\"Q4\",\"sales\":3500}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":3000},{\"time\":\"Q3\",\"value\":2500},{\"time\":\"Q4\",\"value\":3500}],\"title\": \"季度销售额变化\",\"axisXTitle\": \"季度\",\"axisYTitle\": \"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000},{\"time\":\"Q2\",\"value\":3000},{\"time\":\"Q3\",\"value\":2500},{\"time\":\"Q4\",\"value\":3500}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2018,\"revenue\":5000},{\"year\":2019,\"revenue\":7000},{\"year\":2020,\"revenue\":6000},{\"year\":2021,\"revenue\":8000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":2018,\"value\":5000},{\"time\":2019,\"value\":7000},{\"time\":2020,\"value\":6000},{\"time\":2021,\"value\":8000}],\"axisXTitle\": \"year\",\"axisYTitle\": \"revenue\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":2018,\"value\":5000},{\"time\":2019,\"value\":7000},{\"time\":2020,\"value\":6000},{\"time\":2021,\"value\":8000}],\"axisXTitle\":\"year\",\"axisYTitle\":\"revenue\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"sales\":3000},{\"month\":\"Feb\",\"sales\":4500},{\"month\":\"Mar\",\"sales\":4000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":3000},{\"time\":\"Feb\",\"value\":4500},{\"time\":\"Mar\",\"value\":4000}],\"axisXTitle\": \"month\",\"axisYTitle\": \"sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":3000},{\"time\":\"Feb\",\"value\":4500},{\"time\":\"Mar\",\"value\":4000}],\"axisXTitle\":\"month\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"hour\":1,\"temperature\":30},{\"hour\":2,\"temperature\":35},{\"hour\":3,\"temperature\":32},{\"hour\":4,\"temperature\":38}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":1,\"value\":30},{\"time\":2,\"value\":35},{\"time\":3,\"value\":32},{\"time\":4,\"value\":38}],\"axisXTitle\": \"hour\",\"axisYTitle\": \"temperature\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":1,\"value\":30},{\"time\":2,\"value\":35},{\"time\":3,\"value\":32},{\"time\":4,\"value\":38}],\"axisXTitle\":\"hour\",\"axisYTitle\":\"temperature\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Monday\",\"sales\":2000},{\"day\":\"Tuesday\",\"sales\":2500},{\"day\":\"Wednesday\",\"sales\":2200},{\"day\":\"Thursday\",\"sales\":2800},{\"day\":\"Friday\",\"sales\":3000}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Monday\",\"value\":2000},{\"time\":\"Tuesday\",\"value\":2500},{\"time\":\"Wednesday\",\"value\":2200},{\"time\":\"Thursday\",\"value\":2800},{\"time\":\"Friday\",\"value\":3000}],\"axisXTitle\": \"day\",\"axisYTitle\": \"sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Monday\",\"value\":2000},{\"time\":\"Tuesday\",\"value\":2500},{\"time\":\"Wednesday\",\"value\":2200},{\"time\":\"Thursday\",\"value\":2800},{\"time\":\"Friday\",\"value\":3000}],\"axisXTitle\":\"day\",\"axisYTitle\":\"sales\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"profit\":800},{\"quarter\":\"Q2\",\"profit\":1200},{\"quarter\":\"Q3\",\"profit\":1000},{\"quarter\":\"Q4\",\"profit\":1500}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":800},{\"time\":\"Q2\",\"value\":1200},{\"time\":\"Q3\",\"value\":1000},{\"time\":\"Q4\",\"value\":1500}],\"axisXTitle\": \"季度\",\"axisYTitle\": \"利润(万元)\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":800},{\"time\":\"Q2\",\"value\":1200},{\"time\":\"Q3\",\"value\":1000},{\"time\":\"Q4\",\"value\":1500}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"profit\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2016,\"growth\":12},{\"year\":2017,\"growth\":15},{\"year\":2018,\"growth\":10},{\"year\":2019,\"growth\":18}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":2016,\"value\":12},{\"time\":2017,\"value\":15},{\"time\":2018,\"value\":10},{\"time\":2019,\"value\":18}],\"axisXTitle\": \"year\",\"axisYTitle\": \"growth\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":2016,\"value\":12},{\"time\":2017,\"value\":15},{\"time\":2018,\"value\":10},{\"time\":2019,\"value\":18}],\"axisXTitle\":\"year\",\"axisYTitle\":\"growth\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":300,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":500,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":200,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":600,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":300,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":700,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":400,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":300,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":500,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":200,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":600,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":300,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":700,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":400,\"group\":\"C\"}],\"title\": \"Monthly Value by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":300,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":500,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":200,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":600,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":300,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":700,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":400,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2020\",\"value\":1000,\"category\":\"X\"},{\"year\":\"2020\",\"value\":1500,\"category\":\"Y\"},{\"year\":\"2020\",\"value\":900,\"category\":\"Z\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"X\"},{\"year\":\"2021\",\"value\":1900,\"category\":\"Y\"},{\"year\":\"2021\",\"value\":1100,\"category\":\"Z\"},{\"year\":\"2022\",\"value\":1800,\"category\":\"X\"},{\"year\":\"2022\",\"value\":2200,\"category\":\"Y\"},{\"year\":\"2022\",\"value\":1500,\"category\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2020\",\"value\":1000,\"group\":\"X\"},{\"time\":\"2020\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"2020\",\"value\":900,\"group\":\"Z\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"X\"},{\"time\":\"2021\",\"value\":1900,\"group\":\"Y\"},{\"time\":\"2021\",\"value\":1100,\"group\":\"Z\"},{\"time\":\"2022\",\"value\":1800,\"group\":\"X\"},{\"time\":\"2022\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"2022\",\"value\":1500,\"group\":\"Z\"}],\"title\":\"Category Values Over Years\",\"axisXTitle\":\"Year\",\"axisYTitle\":\"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2020\",\"value\":1000,\"group\":\"X\"},{\"time\":\"2020\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"2020\",\"value\":900,\"group\":\"Z\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"X\"},{\"time\":\"2021\",\"value\":1900,\"group\":\"Y\"},{\"time\":\"2021\",\"value\":1100,\"group\":\"Z\"},{\"time\":\"2022\",\"value\":1800,\"group\":\"X\"},{\"time\":\"2022\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"2022\",\"value\":1500,\"group\":\"Z\"}],\"axisXTitle\":\"year\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":200,\"product\":\"A\"},{\"date\":\"202101\",\"value\":300,\"product\":\"B\"},{\"date\":\"202101\",\"value\":100,\"product\":\"C\"},{\"date\":\"202102\",\"value\":400,\"product\":\"A\"},{\"date\":\"202102\",\"value\":500,\"product\":\"B\"},{\"date\":\"202102\",\"value\":300,\"product\":\"C\"},{\"date\":\"202103\",\"value\":600,\"product\":\"A\"},{\"date\":\"202103\",\"value\":700,\"product\":\"B\"},{\"date\":\"202103\",\"value\":400,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":200,\"group\":\"A\"},{\"time\":\"202101\",\"value\":300,\"group\":\"B\"},{\"time\":\"202101\",\"value\":100,\"group\":\"C\"},{\"time\":\"202102\",\"value\":400,\"group\":\"A\"},{\"time\":\"202102\",\"value\":500,\"group\":\"B\"},{\"time\":\"202102\",\"value\":300,\"group\":\"C\"},{\"time\":\"202103\",\"value\":600,\"group\":\"A\"},{\"time\":\"202103\",\"value\":700,\"group\":\"B\"},{\"time\":\"202103\",\"value\":400,\"group\":\"C\"}],\"title\": \"产品销售额变化\",\"axisXTitle\": \"日期\",\"axisYTitle\": \"销售额\",\"groupTitle\": \"产品\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":200,\"group\":\"A\"},{\"time\":\"202101\",\"value\":300,\"group\":\"B\"},{\"time\":\"202101\",\"value\":100,\"group\":\"C\"},{\"time\":\"202102\",\"value\":400,\"group\":\"A\"},{\"time\":\"202102\",\"value\":500,\"group\":\"B\"},{\"time\":\"202102\",\"value\":300,\"group\":\"C\"},{\"time\":\"202103\",\"value\":600,\"group\":\"A\"},{\"time\":\"202103\",\"value\":700,\"group\":\"B\"},{\"time\":\"202103\",\"value\":400,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":3000,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":1000,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":4000,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":5000,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":3000,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":6000,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":7000,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":4000,\"product\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":3000,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":1000,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":4000,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":5000,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":3000,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":6000,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":7000,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":4000,\"group\":\"Z\"}],\"title\":\"Sales by Quarter and Product\",\"axisXTitle\":\"Quarter\",\"axisYTitle\":\"Sales\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":2000,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":3000,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":1000,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":4000,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":5000,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":3000,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":6000,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":7000,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":4000,\"group\":\"Z\"}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "流程图 - Flow Diagram 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2019\",\"value\":800,\"category\":\"A\"},{\"year\":\"2019\",\"value\":1200,\"category\":\"B\"},{\"year\":\"2019\",\"value\":700,\"category\":\"C\"},{\"year\":\"2020\",\"value\":1100,\"category\":\"A\"},{\"year\":\"2020\",\"value\":1600,\"category\":\"B\"},{\"year\":\"2020\",\"value\":900,\"category\":\"C\"},{\"year\":\"2021\",\"value\":1500,\"category\":\"A\"},{\"year\":\"2021\",\"value\":1800,\"category\":\"B\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"2019\",\"value\":800,\"group\":\"A\"},{\"time\":\"2019\",\"value\":1200,\"group\":\"B\"},{\"time\":\"2019\",\"value\":700,\"group\":\"C\"},{\"time\":\"2020\",\"value\":1100,\"group\":\"A\"},{\"time\":\"2020\",\"value\":1600,\"group\":\"B\"},{\"time\":\"2020\",\"value\":900,\"group\":\"C\"},{\"time\":\"2021\",\"value\":1500,\"group\":\"A\"},{\"time\":\"2021\",\"value\":1800,\"group\":\"B\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"C\"}],\"title\": \"各年份不同类别价值变化\",\"axisXTitle\": \"年份\",\"axisYTitle\": \"价值\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"2019\",\"value\":800,\"group\":\"A\"},{\"time\":\"2019\",\"value\":1200,\"group\":\"B\"},{\"time\":\"2019\",\"value\":700,\"group\":\"C\"},{\"time\":\"2020\",\"value\":1100,\"group\":\"A\"},{\"time\":\"2020\",\"value\":1600,\"group\":\"B\"},{\"time\":\"2020\",\"value\":900,\"group\":\"C\"},{\"time\":\"2021\",\"value\":1500,\"group\":\"A\"},{\"time\":\"2021\",\"value\":1800,\"group\":\"B\"},{\"time\":\"2021\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"year\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "散点图 - Scatter Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":600,\"product\":\"A\"},{\"date\":\"202101\",\"value\":800,\"product\":\"B\"},{\"date\":\"202101\",\"value\":400,\"product\":\"C\"},{\"date\":\"202102\",\"value\":1000,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1200,\"product\":\"B\"},{\"date\":\"202102\",\"value\":700,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1500,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1800,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":600,\"group\":\"A\"},{\"time\":\"202101\",\"value\":800,\"group\":\"B\"},{\"time\":\"202101\",\"value\":400,\"group\":\"C\"},{\"time\":\"202102\",\"value\":1000,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1200,\"group\":\"B\"},{\"time\":\"202102\",\"value\":700,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1500,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1800,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"C\"}],\"title\":\"产品销售额随时间变化\",\"axisXTitle\":\"日期\",\"axisYTitle\":\"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":600,\"group\":\"A\"},{\"time\":\"202101\",\"value\":800,\"group\":\"B\"},{\"time\":\"202101\",\"value\":400,\"group\":\"C\"},{\"time\":\"202102\",\"value\":1000,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1200,\"group\":\"B\"},{\"time\":\"202102\",\"value\":700,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1500,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1800,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "散点图 - Scatter Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":400,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":600,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":300,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":800,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":900,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1100,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":600,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":400,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":600,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":300,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":800,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":900,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1100,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":600,\"group\":\"C\"}],\"title\": \"Monthly Value Changes by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":400,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":600,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":300,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":800,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":400,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":900,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1100,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":600,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":500,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":800,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":300,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":1200,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":1500,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":900,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":1800,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":2200,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":1500,\"product\":\"Z\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":500,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":800,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":300,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":1200,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":900,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":1800,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":1500,\"group\":\"Z\"}],\"title\":\"产品销售额随季度变化\",\"axisXTitle\":\"季度\",\"axisYTitle\":\"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Q1\",\"value\":500,\"group\":\"X\"},{\"time\":\"Q1\",\"value\":800,\"group\":\"Y\"},{\"time\":\"Q1\",\"value\":300,\"group\":\"Z\"},{\"time\":\"Q2\",\"value\":1200,\"group\":\"X\"},{\"time\":\"Q2\",\"value\":1500,\"group\":\"Y\"},{\"time\":\"Q2\",\"value\":900,\"group\":\"Z\"},{\"time\":\"Q3\",\"value\":1800,\"group\":\"X\"},{\"time\":\"Q3\",\"value\":2200,\"group\":\"Y\"},{\"time\":\"Q3\",\"value\":1500,\"group\":\"Z\"}],\"axisXTitle\":\"quarter\",\"axisYTitle\":\"sales\"}", + "reference": [ + "散点图 - Scatter Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":500,\"product\":\"A\"},{\"date\":\"202101\",\"value\":700,\"product\":\"B\"},{\"date\":\"202101\",\"value\":300,\"product\":\"C\"},{\"date\":\"202102\",\"value\":900,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1100,\"product\":\"B\"},{\"date\":\"202102\",\"value\":600,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1600,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1100,\"product\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":500,\"group\":\"A\"},{\"time\":\"202101\",\"value\":700,\"group\":\"B\"},{\"time\":\"202101\",\"value\":300,\"group\":\"C\"},{\"time\":\"202102\",\"value\":900,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1100,\"group\":\"B\"},{\"time\":\"202102\",\"value\":600,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1600,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1100,\"group\":\"C\"}],\"title\": \"产品销售额随时间变化\",\"axisXTitle\": \"日期\",\"axisYTitle\": \"销售额\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"202101\",\"value\":500,\"group\":\"A\"},{\"time\":\"202101\",\"value\":700,\"group\":\"B\"},{\"time\":\"202101\",\"value\":300,\"group\":\"C\"},{\"time\":\"202102\",\"value\":900,\"group\":\"A\"},{\"time\":\"202102\",\"value\":1100,\"group\":\"B\"},{\"time\":\"202102\",\"value\":600,\"group\":\"C\"},{\"time\":\"202103\",\"value\":1300,\"group\":\"A\"},{\"time\":\"202103\",\"value\":1600,\"group\":\"B\"},{\"time\":\"202103\",\"value\":1100,\"group\":\"C\"}],\"axisXTitle\":\"date\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "饼图 - Pie Chart 使用示例", + "折线图 - Line Chart 使用示例" + ], + "correctness": 1 + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":700,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":900,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":400,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":1000,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":1200,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":1500,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":1300,\"category\":\"C\"}]", + "response": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":700,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":900,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":400,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":1000,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":1200,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":1500,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":1300,\"group\":\"C\"}],\"title\": \"Monthly Value Changes by Category\",\"axisXTitle\": \"Month\",\"axisYTitle\": \"Value\"}", + "answer": "{\"type\":\"line\",\"data\":[{\"time\":\"Jan\",\"value\":700,\"group\":\"A\"},{\"time\":\"Jan\",\"value\":900,\"group\":\"B\"},{\"time\":\"Jan\",\"value\":400,\"group\":\"C\"},{\"time\":\"Feb\",\"value\":1000,\"group\":\"A\"},{\"time\":\"Feb\",\"value\":1200,\"group\":\"B\"},{\"time\":\"Feb\",\"value\":700,\"group\":\"C\"},{\"time\":\"Mar\",\"value\":1500,\"group\":\"A\"},{\"time\":\"Mar\",\"value\":1800,\"group\":\"B\"},{\"time\":\"Mar\",\"value\":1300,\"group\":\"C\"}],\"axisXTitle\":\"month\",\"axisYTitle\":\"value\"}", + "reference": [ + "[WIP]双轴图 - DualAxes Chart 使用示例", + "折线图 - Line Chart 使用示例", + "条形图 - Bar Chart 使用示例" + ], + "correctness": 1 + } +] diff --git a/evaluations/datastes/chart/line/test.json b/evaluations/datastes/chart/line/test.json new file mode 100644 index 0000000..e2a9ec1 --- /dev/null +++ b/evaluations/datastes/chart/line/test.json @@ -0,0 +1,703 @@ +[ + { + "type": "text2chart", + "question": "某市的平均气温在2018年为15度,2019年上升至17度,2020年又下降到16度。请使用折线图来展示这一变化趋势。", + "answer": { + "type": "line", + "data": [ + { "time": "2018年", "value": 15 }, + { "time": "2019年", "value": 17 }, + { "time": "2020年", "value": 16 } + ], + "title": "某市平均气温变化", + "axisXTitle": "年份", + "axisYTitle": "平均气温(摄氏度)" + } + }, + { + "type": "text2chart", + "question": "一个城市过去五年来的年度降雨量分别是:2016年800毫米,2017年900毫米,2018年700毫米,2019年1000毫米,2020年1100毫米。使用折线图描绘这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "2016年", "value": 800 }, + { "time": "2017年", "value": 900 }, + { "time": "2018年", "value": 700 }, + { "time": "2019年", "value": 1000 }, + { "time": "2020年", "value": 1100 } + ], + "title": "城市年度降雨量变化", + "axisXTitle": "年份", + "axisYTitle": "降雨量(毫米)" + } + }, + { + "type": "text2chart", + "question": "某公司的股价在过去一年中经历了波动:年初时每股价格为50元,年中跌至40元,年底回升到55元。通过折线图来展示该公司股价的变化。", + "answer": { + "type": "line", + "data": [ + { "time": "年初", "value": 50 }, + { "time": "年中", "value": 40 }, + { "time": "年底", "value": 55 } + ], + "title": "公司股价变动", + "axisXTitle": "时间", + "axisYTitle": "股价(元/股)" + } + }, + { + "type": "text2chart", + "question": "记录显示某地区每年新增就业人数如下:2017年增加了5000人,2018年增加了7000人,2019年增加了6000人。请利用折线图展示这一信息。", + "answer": { + "type": "line", + "data": [ + { "time": "2017年", "value": 5000 }, + { "time": "2018年", "value": 7000 }, + { "time": "2019年", "value": 6000 } + ], + "title": "新增就业人数变化", + "axisXTitle": "年份", + "axisYTitle": "新增就业人数(人)" + } + }, + { + "type": "text2chart", + "question": "某产品的销量随季节变化明显:春季销售了10万台,夏季销售了15万台,秋季销售了12万台,冬季销售了8万台。请以折线图形式展现该产品各季节销量情况。", + "answer": { + "type": "line", + "data": [ + { "time": "春季", "value": 100000 }, + { "time": "夏季", "value": 150000 }, + { "time": "秋季", "value": 120000 }, + { "time": "冬季", "value": 80000 } + ], + "title": "产品季节性销量", + "axisXTitle": "季节", + "axisYTitle": "销量(台)" + } + }, + { + "type": "text2chart", + "question": "一项研究表明,随着年龄的增长,人们对社交媒体的兴趣逐渐减少:18岁时有90%的人经常使用社交媒体;到了25岁这个比例降至80%;而到了30岁则进一步降到70%。请绘制一条折线图来表示这种趋势。", + "answer": { + "type": "line", + "data": [ + { "time": "18岁", "value": 90 }, + { "time": "25岁", "value": 80 }, + { "time": "30岁", "value": 70 } + ], + "title": "社交媒体使用兴趣随年龄变化", + "axisXTitle": "年龄", + "axisYTitle": "经常使用比例(%)" + } + }, + { + "type": "text2chart", + "question": "某电商平台每月订单数量统计结果如下:一月份订单数为10万单,二月份为12万单,三月份回落至11万单。请采用折线图方式呈现该电商平台前三个月订单数量的变化。", + "answer": { + "type": "line", + "data": [ + { "time": "一月份", "value": 100000 }, + { "time": "二月份", "value": 120000 }, + { "time": "三月份", "value": 110000 } + ], + "title": "电商平台订单数量变化", + "axisXTitle": "月份", + "axisYTitle": "订单数量(单)" + } + }, + { + "type": "text2chart", + "question": "近年来我国智能手机用户数量持续增长:2018年底达到7亿户,2019年底增至7.5亿户,2020年底更是突破了8亿大关。请构建一张折线图来反映这一增长态势。", + "answer": { + "type": "line", + "data": [ + { "time": "2018年底", "value": 70000 }, + { "time": "2019年底", "value": 75000 }, + { "time": "2020年底", "value": 80000 } + ], + "title": "智能手机用户数量增长", + "axisXTitle": "年份", + "axisYTitle": "用户数量(万户)" + } + }, + { + "type": "text2chart", + "question": "根据最新的健康调查报告,成年人每日平均步行步数有所下降:2017年的平均水平是7000步,2018年降到了6500步,到了2019年进一步减少至6000步。请用折线图来表示这种趋势。", + "answer": { + "type": "line", + "data": [ + { "time": "2017年", "value": 7000 }, + { "time": "2018年", "value": 6500 }, + { "time": "2019年", "value": 6000 } + ], + "title": "成年人每日平均步行步数变化", + "axisXTitle": "年份", + "axisYTitle": "平均步数(步)" + } + }, + + { + "type": "text2chart", + "question": "过去五年内,某城市的平均气温分别为:2018 年 15°C,2019 年 16°C,2020 年 15°C,2021 年 17°C,2022 年 18°C。用折线图可视化这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "2018 年", "value": 15 }, + { "time": "2019 年", "value": 16 }, + { "time": "2020 年", "value": 15 }, + { "time": "2021 年", "value": 17 }, + { "time": "2022 年", "value": 18 } + ], + "title": "某城市平均气温变化", + "axisXTitle": "年份", + "axisYTitle": "平均气温(°C)" + } + }, + { + "type": "text2chart", + "question": "从 2017 年到 2021 年,某大学的在校学生人数变化为:2017 年 3000 人,2018 年 3200 人,2019 年 3100 人,2020 年 3300 人,2021 年 3400 人。用折线图展示。", + "answer": { + "type": "line", + "data": [ + { "time": "2017 年", "value": 3000 }, + { "time": "2018 年", "value": 3200 }, + { "time": "2019 年", "value": 3100 }, + { "time": "2020 年", "value": 3300 }, + { "time": "2021 年", "value": 3400 } + ], + "title": "大学在校学生人数变化", + "axisXTitle": "年份", + "axisYTitle": "在校学生人数" + } + }, + { + "type": "text2chart", + "question": "某公司员工人数在近四年内的变化为:2019 年 150 人,2020 年 160 人,2021 年 155 人,2022 年 170 人。请用折线图表示。", + "answer": { + "type": "line", + "data": [ + { "time": "2019 年", "value": 150 }, + { "time": "2020 年", "value": 160 }, + { "time": "2021 年", "value": 155 }, + { "time": "2022 年", "value": 170 } + ], + "title": "公司员工人数变化", + "axisXTitle": "年份", + "axisYTitle": "员工人数" + } + }, + { + "type": "text2chart", + "question": "某产品的季度销售量如下:Q1 为 2000 件,Q2 为 2500 件,Q3 为 2300 件,Q4 为 2600 件。用折线图展示这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 2000 }, + { "time": "Q2", "value": 2500 }, + { "time": "Q3", "value": 2300 }, + { "time": "Q4", "value": 2600 } + ], + "title": "产品季度销售量", + "axisXTitle": "季度", + "axisYTitle": "销售量(件)" + } + }, + { + "type": "text2chart", + "question": "在最近三年内,某国的年通货膨胀率分别为:2020 年 2.5%,2021 年 3.0%,2022 年 2.8%。使用折线图展示这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "2020 年", "value": 2.5 }, + { "time": "2021 年", "value": 3.0 }, + { "time": "2022 年", "value": 2.8 } + ], + "title": "年度通货膨胀率", + "axisXTitle": "年份", + "axisYTitle": "通货膨胀率(%)" + } + }, + { + "type": "text2chart", + "question": "某项目在 2021 年的月度花费如下:一月 100 万,二月 120 万,三月 110 万,四月 130 万。用折线图展示这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "一月", "value": 100 }, + { "time": "二月", "value": 120 }, + { "time": "三月", "value": 110 }, + { "time": "四月", "value": 130 } + ], + "title": "项目月度花费", + "axisXTitle": "月份", + "axisYTitle": "花费(万元)" + } + }, + { + "type": "text2chart", + "question": "某城市从 2018 年至 2020 年的空气质量指数(AQI)年平均值分别为:2018 年 75,2019 年 72,2020 年 68。使用折线图进行可视化。", + "answer": { + "type": "line", + "data": [ + { "time": "2018 年", "value": 75 }, + { "time": "2019 年", "value": 72 }, + { "time": "2020 年", "value": 68 } + ], + "title": "空气质量指数年平均值", + "axisXTitle": "年份", + "axisYTitle": "AQI" + } + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用多条折线图展示各国森林覆盖率的变化。", + "answer": { + "type": "line", + "data": [ + { "time": "2010年", "value": 20, "group": "中国" }, + { "time": "2020年", "value": 25, "group": "中国" }, + { "time": "2010年", "value": 20, "group": "印度" }, + { "time": "2020年", "value": 23, "group": "印度" }, + { "time": "2010年", "value": 60, "group": "巴西" }, + { "time": "2020年", "value": 55, "group": "巴西" }, + { "time": "2010年", "value": 45, "group": "俄罗斯" }, + { "time": "2020年", "value": 50, "group": "俄罗斯" }, + { "time": "2010年", "value": 30, "group": "加拿大" }, + { "time": "2020年", "value": 30, "group": "加拿大" } + ], + "title": "各国森林覆盖率变化", + "axisXTitle": "年份", + "axisYTitle": "森林覆盖率(%)" + } + }, + { + "type": "text2chart", + "question": "一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用折线图展示各国森林覆盖率的变化。", + "answer": { + "type": "line", + "data": [ + { "time": "2010年", "value": 20, "group": "中国" }, + { "time": "2020年", "value": 25, "group": "中国" }, + { "time": "2010年", "value": 20, "group": "印度" }, + { "time": "2020年", "value": 23, "group": "印度" }, + { "time": "2010年", "value": 60, "group": "巴西" }, + { "time": "2020年", "value": 55, "group": "巴西" }, + { "time": "2010年", "value": 45, "group": "俄罗斯" }, + { "time": "2020年", "value": 50, "group": "俄罗斯" }, + { "time": "2010年", "value": 30, "group": "加拿大" }, + { "time": "2020年", "value": 30, "group": "加拿大" } + ], + "title": "各国森林覆盖率变化", + "axisXTitle": "年份", + "axisYTitle": "森林覆盖率(%)" + } + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用多条折线图展示这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "第一年", "value": 150, "group": "城市A" }, + { "time": "第二年", "value": 160, "group": "城市A" }, + { "time": "第三年", "value": 145, "group": "城市A" }, + { "time": "第四年", "value": 155, "group": "城市A" }, + { "time": "第五年", "value": 165, "group": "城市A" }, + { "time": "第一年", "value": 100, "group": "城市B" }, + { "time": "第二年", "value": 110, "group": "城市B" }, + { "time": "第三年", "value": 105, "group": "城市B" }, + { "time": "第四年", "value": 115, "group": "城市B" }, + { "time": "第五年", "value": 120, "group": "城市B" }, + { "time": "第一年", "value": 90, "group": "城市C" }, + { "time": "第二年", "value": 85, "group": "城市C" }, + { "time": "第三年", "value": 80, "group": "城市C" }, + { "time": "第四年", "value": 75, "group": "城市C" }, + { "time": "第五年", "value": 70, "group": "城市C" } + ], + "title": "城市空气污染指数变化", + "axisXTitle": "年份", + "axisYTitle": "空气污染指数" + } + }, + { + "type": "text2chart", + "question": "在某项研究中,过去五年中三个城市的空气污染指数变化如下:城市A分别为150,160,145,155,165;城市B分别为100,110,105,115,120;城市C分别为90,85,80,75,70。用折线图展示这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "第一年", "value": 150, "group": "城市A" }, + { "time": "第二年", "value": 160, "group": "城市A" }, + { "time": "第三年", "value": 145, "group": "城市A" }, + { "time": "第四年", "value": 155, "group": "城市A" }, + { "time": "第五年", "value": 165, "group": "城市A" }, + { "time": "第一年", "value": 100, "group": "城市B" }, + { "time": "第二年", "value": 110, "group": "城市B" }, + { "time": "第三年", "value": 105, "group": "城市B" }, + { "time": "第四年", "value": 115, "group": "城市B" }, + { "time": "第五年", "value": 120, "group": "城市B" }, + { "time": "第一年", "value": 90, "group": "城市C" }, + { "time": "第二年", "value": 85, "group": "城市C" }, + { "time": "第三年", "value": 80, "group": "城市C" }, + { "time": "第四年", "value": 75, "group": "城市C" }, + { "time": "第五年", "value": 70, "group": "城市C" } + ], + "title": "城市空气污染指数变化", + "axisXTitle": "年份", + "axisYTitle": "空气污染指数" + } + }, + + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{ \"month\": \"Jan\",\"value\": 150 },{ \"month\": \"Feb\", \"value\": 200 },{ \"month\": \"Mar\" ,\"value\": 180 }]", + "answer": { + "type": "line", + "data": [ + { "time": "Jan", "value": 150 }, + { "time": "Feb", "value": 200 }, + { "time": "Mar", "value": 180 } + ], + "axisXTitle": "month", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Mon\",\"value\":500},{\"day\":\"Tue\",\"value\":700},{\"day\":\"Wed\",\"value\":600},{\"day\":\"Thu\",\"value\":900},{\"day\":\"Fri\",\"value\":800}]", + "answer": { + "type": "line", + "data": [ + { "time": "Mon", "value": 500 }, + { "time": "Tue", "value": 700 }, + { "time": "Wed", "value": 600 }, + { "time": "Thu", "value": 900 }, + { "time": "Fri", "value": 800 } + ], + "axisXTitle": "day", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"week\":\"1\",\"value\":1000},{\"week\":\"2\",\"value\":1500},{\"week\":\"3\",\"value\":1200},{\"week\":\"4\",\"value\":1800}]", + "answer": { + "type": "line", + "data": [ + { "time": "1", "value": 1000 }, + { "time": "2", "value": 1500 }, + { "time": "3", "value": 1200 }, + { "time": "4", "value": 1800 } + ], + "axisXTitle": "week", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000},{\"quarter\":\"Q2\",\"sales\":3000},{\"quarter\":\"Q3\",\"sales\":2500},{\"quarter\":\"Q4\",\"sales\":3500}]", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 2000 }, + { "time": "Q2", "value": 3000 }, + { "time": "Q3", "value": 2500 }, + { "time": "Q4", "value": 3500 } + ], + "axisXTitle": "quarter", + "axisYTitle": "sales" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2018,\"revenue\":5000},{\"year\":2019,\"revenue\":7000},{\"year\":2020,\"revenue\":6000},{\"year\":2021,\"revenue\":8000}]", + "answer": { + "type": "line", + "data": [ + { "time": 2018, "value": 5000 }, + { "time": 2019, "value": 7000 }, + { "time": 2020, "value": 6000 }, + { "time": 2021, "value": 8000 } + ], + "axisXTitle": "year", + "axisYTitle": "revenue" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"sales\":3000},{\"month\":\"Feb\",\"sales\":4500},{\"month\":\"Mar\",\"sales\":4000}]", + "answer": { + "type": "line", + "data": [ + { "time": "Jan", "value": 3000 }, + { "time": "Feb", "value": 4500 }, + { "time": "Mar", "value": 4000 } + ], + "axisXTitle": "month", + "axisYTitle": "sales" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"hour\":1,\"temperature\":30},{\"hour\":2,\"temperature\":35},{\"hour\":3,\"temperature\":32},{\"hour\":4,\"temperature\":38}]", + "answer": { + "type": "line", + "data": [ + { "time": 1, "value": 30 }, + { "time": 2, "value": 35 }, + { "time": 3, "value": 32 }, + { "time": 4, "value": 38 } + ], + "axisXTitle": "hour", + "axisYTitle": "temperature" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"day\":\"Monday\",\"sales\":2000},{\"day\":\"Tuesday\",\"sales\":2500},{\"day\":\"Wednesday\",\"sales\":2200},{\"day\":\"Thursday\",\"sales\":2800},{\"day\":\"Friday\",\"sales\":3000}]", + "answer": { + "type": "line", + "data": [ + { "time": "Monday", "value": 2000 }, + { "time": "Tuesday", "value": 2500 }, + { "time": "Wednesday", "value": 2200 }, + { "time": "Thursday", "value": 2800 }, + { "time": "Friday", "value": 3000 } + ], + "axisXTitle": "day", + "axisYTitle": "sales" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"profit\":800},{\"quarter\":\"Q2\",\"profit\":1200},{\"quarter\":\"Q3\",\"profit\":1000},{\"quarter\":\"Q4\",\"profit\":1500}]", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 800 }, + { "time": "Q2", "value": 1200 }, + { "time": "Q3", "value": 1000 }, + { "time": "Q4", "value": 1500 } + ], + "axisXTitle": "quarter", + "axisYTitle": "profit" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":2016,\"growth\":12},{\"year\":2017,\"growth\":15},{\"year\":2018,\"growth\":10},{\"year\":2019,\"growth\":18}]", + "answer": { + "type": "line", + "data": [ + { "time": 2016, "value": 12 }, + { "time": 2017, "value": 15 }, + { "time": 2018, "value": 10 }, + { "time": 2019, "value": 18 } + ], + "axisXTitle": "year", + "axisYTitle": "growth" + } + }, + + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":300,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":500,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":200,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":600,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":300,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":700,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":400,\"category\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Jan", "value": 300, "group": "A" }, + { "time": "Jan", "value": 500, "group": "B" }, + { "time": "Jan", "value": 200, "group": "C" }, + { "time": "Feb", "value": 400, "group": "A" }, + { "time": "Feb", "value": 600, "group": "B" }, + { "time": "Feb", "value": 300, "group": "C" }, + { "time": "Mar", "value": 700, "group": "A" }, + { "time": "Mar", "value": 800, "group": "B" }, + { "time": "Mar", "value": 400, "group": "C" } + ], + "axisXTitle": "month", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2020\",\"value\":1000,\"category\":\"X\"},{\"year\":\"2020\",\"value\":1500,\"category\":\"Y\"},{\"year\":\"2020\",\"value\":900,\"category\":\"Z\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"X\"},{\"year\":\"2021\",\"value\":1900,\"category\":\"Y\"},{\"year\":\"2021\",\"value\":1100,\"category\":\"Z\"},{\"year\":\"2022\",\"value\":1800,\"category\":\"X\"},{\"year\":\"2022\",\"value\":2200,\"category\":\"Y\"},{\"year\":\"2022\",\"value\":1500,\"category\":\"Z\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "2020", "value": 1000, "group": "X" }, + { "time": "2020", "value": 1500, "group": "Y" }, + { "time": "2020", "value": 900, "group": "Z" }, + { "time": "2021", "value": 1300, "group": "X" }, + { "time": "2021", "value": 1900, "group": "Y" }, + { "time": "2021", "value": 1100, "group": "Z" }, + { "time": "2022", "value": 1800, "group": "X" }, + { "time": "2022", "value": 2200, "group": "Y" }, + { "time": "2022", "value": 1500, "group": "Z" } + ], + "axisXTitle": "year", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":200,\"product\":\"A\"},{\"date\":\"202101\",\"value\":300,\"product\":\"B\"},{\"date\":\"202101\",\"value\":100,\"product\":\"C\"},{\"date\":\"202102\",\"value\":400,\"product\":\"A\"},{\"date\":\"202102\",\"value\":500,\"product\":\"B\"},{\"date\":\"202102\",\"value\":300,\"product\":\"C\"},{\"date\":\"202103\",\"value\":600,\"product\":\"A\"},{\"date\":\"202103\",\"value\":700,\"product\":\"B\"},{\"date\":\"202103\",\"value\":400,\"product\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "202101", "value": 200, "group": "A" }, + { "time": "202101", "value": 300, "group": "B" }, + { "time": "202101", "value": 100, "group": "C" }, + { "time": "202102", "value": 400, "group": "A" }, + { "time": "202102", "value": 500, "group": "B" }, + { "time": "202102", "value": 300, "group": "C" }, + { "time": "202103", "value": 600, "group": "A" }, + { "time": "202103", "value": 700, "group": "B" }, + { "time": "202103", "value": 400, "group": "C" } + ], + "axisXTitle": "date", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":2000,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":3000,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":1000,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":4000,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":5000,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":3000,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":6000,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":7000,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":4000,\"product\":\"Z\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 2000, "group": "X" }, + { "time": "Q1", "value": 3000, "group": "Y" }, + { "time": "Q1", "value": 1000, "group": "Z" }, + { "time": "Q2", "value": 4000, "group": "X" }, + { "time": "Q2", "value": 5000, "group": "Y" }, + { "time": "Q2", "value": 3000, "group": "Z" }, + { "time": "Q3", "value": 6000, "group": "X" }, + { "time": "Q3", "value": 7000, "group": "Y" }, + { "time": "Q3", "value": 4000, "group": "Z" } + ], + "axisXTitle": "quarter", + "axisYTitle": "sales" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"year\":\"2019\",\"value\":800,\"category\":\"A\"},{\"year\":\"2019\",\"value\":1200,\"category\":\"B\"},{\"year\":\"2019\",\"value\":700,\"category\":\"C\"},{\"year\":\"2020\",\"value\":1100,\"category\":\"A\"},{\"year\":\"2020\",\"value\":1600,\"category\":\"B\"},{\"year\":\"2020\",\"value\":900,\"category\":\"C\"},{\"year\":\"2021\",\"value\":1500,\"category\":\"A\"},{\"year\":\"2021\",\"value\":1800,\"category\":\"B\"},{\"year\":\"2021\",\"value\":1300,\"category\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "2019", "value": 800, "group": "A" }, + { "time": "2019", "value": 1200, "group": "B" }, + { "time": "2019", "value": 700, "group": "C" }, + { "time": "2020", "value": 1100, "group": "A" }, + { "time": "2020", "value": 1600, "group": "B" }, + { "time": "2020", "value": 900, "group": "C" }, + { "time": "2021", "value": 1500, "group": "A" }, + { "time": "2021", "value": 1800, "group": "B" }, + { "time": "2021", "value": 1300, "group": "C" } + ], + "axisXTitle": "year", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":600,\"product\":\"A\"},{\"date\":\"202101\",\"value\":800,\"product\":\"B\"},{\"date\":\"202101\",\"value\":400,\"product\":\"C\"},{\"date\":\"202102\",\"value\":1000,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1200,\"product\":\"B\"},{\"date\":\"202102\",\"value\":700,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1500,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1800,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "202101", "value": 600, "group": "A" }, + { "time": "202101", "value": 800, "group": "B" }, + { "time": "202101", "value": 400, "group": "C" }, + { "time": "202102", "value": 1000, "group": "A" }, + { "time": "202102", "value": 1200, "group": "B" }, + { "time": "202102", "value": 700, "group": "C" }, + { "time": "202103", "value": 1500, "group": "A" }, + { "time": "202103", "value": 1800, "group": "B" }, + { "time": "202103", "value": 1300, "group": "C" } + ], + "axisXTitle": "date", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":400,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":600,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":300,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":800,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":400,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":900,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1100,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":600,\"category\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Jan", "value": 400, "group": "A" }, + { "time": "Jan", "value": 600, "group": "B" }, + { "time": "Jan", "value": 300, "group": "C" }, + { "time": "Feb", "value": 700, "group": "A" }, + { "time": "Feb", "value": 800, "group": "B" }, + { "time": "Feb", "value": 400, "group": "C" }, + { "time": "Mar", "value": 900, "group": "A" }, + { "time": "Mar", "value": 1100, "group": "B" }, + { "time": "Mar", "value": 600, "group": "C" } + ], + "axisXTitle": "month", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":500,\"product\":\"X\"},{\"quarter\":\"Q1\",\"sales\":800,\"product\":\"Y\"},{\"quarter\":\"Q1\",\"sales\":300,\"product\":\"Z\"},{\"quarter\":\"Q2\",\"sales\":1200,\"product\":\"X\"},{\"quarter\":\"Q2\",\"sales\":1500,\"product\":\"Y\"},{\"quarter\":\"Q2\",\"sales\":900,\"product\":\"Z\"},{\"quarter\":\"Q3\",\"sales\":1800,\"product\":\"X\"},{\"quarter\":\"Q3\",\"sales\":2200,\"product\":\"Y\"},{\"quarter\":\"Q3\",\"sales\":1500,\"product\":\"Z\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 500, "group": "X" }, + { "time": "Q1", "value": 800, "group": "Y" }, + { "time": "Q1", "value": 300, "group": "Z" }, + { "time": "Q2", "value": 1200, "group": "X" }, + { "time": "Q2", "value": 1500, "group": "Y" }, + { "time": "Q2", "value": 900, "group": "Z" }, + { "time": "Q3", "value": 1800, "group": "X" }, + { "time": "Q3", "value": 2200, "group": "Y" }, + { "time": "Q3", "value": 1500, "group": "Z" } + ], + "axisXTitle": "quarter", + "axisYTitle": "sales" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"date\":\"202101\",\"value\":500,\"product\":\"A\"},{\"date\":\"202101\",\"value\":700,\"product\":\"B\"},{\"date\":\"202101\",\"value\":300,\"product\":\"C\"},{\"date\":\"202102\",\"value\":900,\"product\":\"A\"},{\"date\":\"202102\",\"value\":1100,\"product\":\"B\"},{\"date\":\"202102\",\"value\":600,\"product\":\"C\"},{\"date\":\"202103\",\"value\":1300,\"product\":\"A\"},{\"date\":\"202103\",\"value\":1600,\"product\":\"B\"},{\"date\":\"202103\",\"value\":1100,\"product\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "202101", "value": 500, "group": "A" }, + { "time": "202101", "value": 700, "group": "B" }, + { "time": "202101", "value": 300, "group": "C" }, + { "time": "202102", "value": 900, "group": "A" }, + { "time": "202102", "value": 1100, "group": "B" }, + { "time": "202102", "value": 600, "group": "C" }, + { "time": "202103", "value": 1300, "group": "A" }, + { "time": "202103", "value": 1600, "group": "B" }, + { "time": "202103", "value": 1100, "group": "C" } + ], + "axisXTitle": "date", + "axisYTitle": "value" + } + }, + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"month\":\"Jan\",\"value\":700,\"category\":\"A\"},{\"month\":\"Jan\",\"value\":900,\"category\":\"B\"},{\"month\":\"Jan\",\"value\":400,\"category\":\"C\"},{\"month\":\"Feb\",\"value\":1000,\"category\":\"A\"},{\"month\":\"Feb\",\"value\":1200,\"category\":\"B\"},{\"month\":\"Feb\",\"value\":700,\"category\":\"C\"},{\"month\":\"Mar\",\"value\":1500,\"category\":\"A\"},{\"month\":\"Mar\",\"value\":1800,\"category\":\"B\"},{\"month\":\"Mar\",\"value\":1300,\"category\":\"C\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Jan", "value": 700, "group": "A" }, + { "time": "Jan", "value": 900, "group": "B" }, + { "time": "Jan", "value": 400, "group": "C" }, + { "time": "Feb", "value": 1000, "group": "A" }, + { "time": "Feb", "value": 1200, "group": "B" }, + { "time": "Feb", "value": 700, "group": "C" }, + { "time": "Mar", "value": 1500, "group": "A" }, + { "time": "Mar", "value": 1800, "group": "B" }, + { "time": "Mar", "value": 1300, "group": "C" } + ], + "axisXTitle": "month", + "axisYTitle": "value" + } + } +] diff --git a/evaluations/datastes/intention/.gitkeep b/evaluations/datastes/intention/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/evaluations/package.json b/evaluations/package.json new file mode 100644 index 0000000..9656d41 --- /dev/null +++ b/evaluations/package.json @@ -0,0 +1,16 @@ +{ + "name": "knowledge-evaluations", + "type": "module", + "scripts": { + "eval:data": "node ./scripts/eval/eval-data.js", + "eval:metrics": "node ./scripts/eval/eval-metrics.js", + "prompt": "node ./scripts/prompt/generate-prompts.js" + }, + "devDependencies": { + "inquirer": "^12.0.1", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/evaluations/prompts/agent.md b/evaluations/prompts/agent.md new file mode 100644 index 0000000..4e15dbc --- /dev/null +++ b/evaluations/prompts/agent.md @@ -0,0 +1,66 @@ +# prompt 1 + +## 角色 + +你是一个数据可视化专家,你拥有多年的数据分析和可视化经验,具有可视化知识咨询和数据可视化生成能力。对于数据可视化生成,你的专业能力覆盖了从数据提取到可视化图表生成全过程。 + +## 任务 + +- 可视化知识咨询:根据用户的可视化问题,专业的回答可视化知识。 +- 数据可视化生成:根据用户的可视化意图,选择合适的图表类型,提取关键的可视化数据,生成可视化的图表配置。 + +## 数据可视化生成工作流程 + +1. 理解用户问题,提取可视化意图信息。 +2. 理解用户的数据,提取关键的可视化数据。 +3. 根据意图选择对应的图表类型;意图表达不明确时,根据可视化的数据选择合适的图表类型。 +4. 根据图表类型和可视化数据,生成可视化图表配置。 + +## 要求 + +- 当输出图表配置时,输出的格式为 JSON 格式,数据为不得添加任何额外的文字描述或解释。 + +# prompt 2 + +# 角色: + +你是一位数据可视化专家,专注于图表可视化与可视化知识咨询。 + +## 角色描述: + +你拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通数据提取、清洗、分析和可视化全过程,能够根据数据特性选择最合适的图表类型,确保信息传达的准确性和有效性。你的专业能力不仅限于技术层面,还包括对数据故事的解读和呈现,能够将复杂的数据转化为直观的视觉信息,帮助用户快速理解数据背后的意义。 + +## 任务: + +- **可视化知识咨询**:解答用户关于数据可视化的问题,提供专业建议和指导。 +- **数据可视化生成**:根据用户需求,生成精确的图表配置,包括但不限于折线图、柱状图、饼图、散点图等,确保图表清晰、准确地反映数据特征。 + +## 技能: + +- 深入理解数据可视化原理,包括色彩理论、图表类型选择和数据映射。 +- 能够根据数据特性快速判断并选择最合适的图表类型。 +- 具备良好的沟通能力,能够清晰地解释数据可视化概念和方法。 + +## 工作流程: + +1. **理解用户问题**:仔细聆听用户需求,提取可视化意图信息。 +2. **数据理解与提取**:分析用户提供的数据,提取关键的可视化数据。 +3. **图表类型选择**:根据用户意图或数据特性,选择最合适的图表类型。 +4. **图表配置生成**:根据图表类型和可视化数据,生成可视化图表配置,使用 JSON 格式。 + +## 限制: + +- 当生成图表配置时,输出格式必须为 JSON,不添加任何额外的主观解释或评论。 +- 输出 JSON 格式时,不包裹 MarkDown 语法代码块(比如 \```JSON \```)。 +- 不得使用未经用户许可的外部数据源。 + +## 参考例子: + +- 用户询问:我国出生人口 2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化上面的数据。 +- 你回答:{"type":"line","data":[{"time":"2015 年","value":1700},{"time":"2016 年","value":1500},{"time":"2017 年","value":1200}],"title": "出生人口变化", "axisXTitle": "年份",axisYTitle: "出生人口(万人)"} +- 用户询问:用折线图可视化我的数据 [{ "year": 2015,"industrial": 7200.0 },{ "year": 2016, "industrial": 3660.0 },{ "year": 2017 ,"industrial": 4100.0 }] +- 你回答:{"type":"line","data":[{"time":2015,"value":7200},{"time":2016,"value":3660},{"time":2017,"value":4100}],"axisXTitle": "year","axisYTitle": "industrial"} +- 用户询问:海底捞公司外卖 2015 年收入金额 80 百万元,2016 年收入金额 140 百万元,2017 年收入金额 220 百万元。可视化上面数据的趋势变化。 +- 你回答:{"type":"line","data":[{"time":2015,"value":80},{"time":2016,"value":140},{"time":2017,"value":220}],"title": "海底捞公司外卖变化", "axisXTitle": "年份",axisYTitle: "收入金额(百万元)"} +- 用户询问:“如何在数据集中展示销售额随时间的变化趋势?” +- 你回答:“根据您的需求,我建议使用折线图来展示销售额随时间的变化。” diff --git a/evaluations/prompts/line/data2chart.md b/evaluations/prompts/line/data2chart.md new file mode 100644 index 0000000..e00e71a --- /dev/null +++ b/evaluations/prompts/line/data2chart.md @@ -0,0 +1,65 @@ +## 角色 + +你是一个 mock 图表数据生成器,生成折线图相关的可视化问答对数据。 + +## 任务 + +1. 结合可视化场景,随机生成折线图相关的可视化数据,主要内容为可视化的数据和用什么可视化图表,比如: “用折线图可视化我的数据 [{"quarter":"Q1","sales":1540,"product":"家具"},{"quarter":"Q1","sales":2540,"product":"电子产品"},{"quarter":"Q1","sales":500,"product":"办公用品"},{"quarter":"Q2","sales":2000,"product":"家具"},{"quarter":"Q2","sales":3000,"product":"电子产品"},{"quarter":"Q2","sales":1000,"product":"办公用品"},{"quarter":"Q3","sales":4500,"product":"家具"},{"quarter":"Q3","sales":6500,"product":"电子产品"},{"quarter":"Q3","sales":2500,"product":"办公用品"}]” +2. 根据可视化相关问题,生成折线图图表的配置 +3. 以 JSON 格式归纳为一条问答对数据,{"question": <可视化问题>,"answer": <图表的配置>} + +## 折线图图表知识库 + +### 图表属性 + +```typescript +type Line = { + type: 'line'; + data: { time: string | number; value: number; group?: string }[]; + title?: string; + axisXTitle?: string; + axisYTitle?: string; +}; +``` + +### 数据要求 + +- type:图表的类型,必填,文本类型,值必须为 "line"。 +- data:图表的数据,必填,数组对象类型; + - time:数据的时序名称 ,必填,文本或数值类型; + - value:数据的值,必填,数值类型; + - group:数据分组名称,选填,文本类型; +- title: 图表的标题,选填,文本类型 +- axisXTitle:x 轴的标题,选填,文本类型 +- axisYTitle:y 轴的标题,选填,文本类型 + +## 参考例子 + +```json +[ + { + "type": "data2chart", + "question": "用折线图可视化我的数据 [{\"quarter\":\"Q1\",\"sales\":1540,\"product\":\"家具\"},{\"quarter\":\"Q1\",\"sales\":2540,\"product\":\"电子产品\"},{\"quarter\":\"Q1\",\"sales\":500,\"product\":\"办公用品\"},{\"quarter\":\"Q2\",\"sales\":2000,\"product\":\"家具\"},{\"quarter\":\"Q2\",\"sales\":3000,\"product\":\"电子产品\"},{\"quarter\":\"Q2\",\"sales\":1000,\"product\":\"办公用品\"},{\"quarter\":\"Q3\",\"sales\":4500,\"product\":\"家具\"},{\"quarter\":\"Q3\",\"sales\":6500,\"product\":\"电子产品\"},{\"quarter\":\"Q3\",\"sales\":2500,\"product\":\"办公用品\"}]", + "answer": { + "type": "line", + "data": [ + { "time": "Q1", "value": 1540, "group": "家具" }, + { "time": "Q1", "value": 2540, "group": "电子产品" }, + { "time": "Q1", "value": 500, "group": "办公用品" }, + { "time": "Q2", "value": 2000, "group": "家具" }, + { "time": "Q2", "value": 3000, "group": "电子产品" }, + { "time": "Q2", "value": 1000, "group": "办公用品" }, + { "time": "Q3", "value": 4500, "group": "家具" }, + { "time": "Q3", "value": 6500, "group": "电子产品" }, + { "time": "Q3", "value": 2500, "group": "办公用品" } + ], + "axisXTitle": "quarter", + "axisYTitle": "sales" + } + } +] +``` + +## 要求 + +- 请生成 10 条这样的记录,并以 JSON 格式输出。 diff --git a/evaluations/prompts/line/text2chart.md b/evaluations/prompts/line/text2chart.md new file mode 100644 index 0000000..d06f490 --- /dev/null +++ b/evaluations/prompts/line/text2chart.md @@ -0,0 +1,76 @@ +## 角色 + +你是一个 mock 图表数据生成器,生成折线图相关的可视化问答对数据。 + +## 任务 + +1. 随机结合可视化场景,生成折线图相关的可视化问题,用自然语言纯文本描述,主要内容为数据描述和用什么可视化图表,比如: “我国出生人口 2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化上面的数据” +2. 根据可视化相关问题,生成折线图图表的配置 +3. 以 JSON 格式归纳为一条问答对数据,{"question": <可视化问题>,"answer": <图表的配置>} + +## 折线图图表知识库 + +### 图表属性 + +```typescript +type Line = { + type: 'line'; + data: { time: string | number; value: number; group?: string }[]; + title?: string; + axisXTitle?: string; + axisYTitle?: string; +}; +``` + +### 数据要求 + +- type:图表的类型,必填,文本类型,值必须为 "line"。 +- data:图表的数据,必填,数组对象类型; + - time:数据的时序名称 ,必填,文本或数值类型; + - value:数据的值,必填,数值类型; + - group:数据分组名称,选填,文本类型; +- title: 图表的标题,选填,文本类型 +- axisXTitle:x 轴的标题,选填,文本类型 +- axisYTitle:y 轴的标题,选填,文本类型 + +## 参考例子 + +```json +[ + { + "type": "text2chart", + "question": "我国出生人口 2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化上面的数据", + "answer": { + "type": "line", + "data": [ + { "time": "2015 年", "value": 1700 }, + { "time": "2016 年", "value": 1500 }, + { "time": "2017 年", "value": 1200 } + ], + "title": "出生人口变化", + "axisXTitle": "年份", + "axisYTitle": "出生人口(万人)" + } + }, + { + "type": "text2chart", + "question": "公司季度业绩显示,第一季度销售额为 500 万美元,第二季度为 600 万美元,第三季度为 700 万美元,第四季度为 800 万美元。使用折线图可视化这些数据。", + "answer": { + "type": "line", + "data": [ + { "time": "第一季度", "value": 500 }, + { "time": "第二季度", "value": 600 }, + { "time": "第三季度", "value": 700 }, + { "time": "第四季度", "value": 800 } + ], + "title": "公司季度业绩", + "axisXTitle": "季度", + "axisYTitle": "销售额(万美元)" + } + } +] +``` + +## 要求 + +- 请生成 10 条这样的记录,并以 JSON 格式输出。 diff --git a/evaluations/scripts/constants/index.js b/evaluations/scripts/constants/index.js new file mode 100644 index 0000000..205d2b1 --- /dev/null +++ b/evaluations/scripts/constants/index.js @@ -0,0 +1,18 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +export const __dirProject = resolve(__dirname, '../../'); + +const projectConfigPath = resolve(__dirProject, 'config.json'); +const projectLocalConfigPath = resolve(__dirProject, 'config.local.json'); + +export const PROJECT_CONFIG = JSON.parse( + readFileSync( + existsSync(projectLocalConfigPath) ? projectLocalConfigPath : projectConfigPath, + 'utf-8', + ), +); diff --git a/evaluations/scripts/eval/eval-data.js b/evaluations/scripts/eval/eval-data.js new file mode 100644 index 0000000..63f5b4b --- /dev/null +++ b/evaluations/scripts/eval/eval-data.js @@ -0,0 +1,24 @@ +/** + * 测评数据 + */ +import { getEvalDataset } from '../helpers/evaluate.js'; +import { readDataset, writeDataset } from '../helpers/read-dataset.js'; + +async function evaluateDataset(chartName) { + const testDatasetPath = `datastes/chart/${chartName}/test.json`; + const evalDatasetPath = `datastes/chart/${chartName}/eval.json`; + + const testDataset = await readDataset(testDatasetPath); + const evalDataset = await getEvalDataset(testDataset); + await writeDataset(evalDatasetPath, evalDataset); +} + +const chartName = process.argv[2]; +if (!chartName) { + console.error('Please provide a chart name as an argument.'); + process.exit(1); +} + +evaluateDataset(chartName).catch((error) => { + console.error('Error evaluating dataset:', error); +}); diff --git a/evaluations/scripts/eval/eval-metrics.js b/evaluations/scripts/eval/eval-metrics.js new file mode 100644 index 0000000..a4ccc8d --- /dev/null +++ b/evaluations/scripts/eval/eval-metrics.js @@ -0,0 +1,23 @@ +/** + * 生成指标 + */ +import { evaluate } from '../helpers/evaluate.js'; +import { readDataset, writeDataset } from '../helpers/read-dataset.js'; + +async function evalMetrics(chartName) { + const evalDatasetPath = `datastes/chart/${chartName}/eval.json`; + + const evalDataset = await readDataset(evalDatasetPath); + const result = await evaluate(evalDataset); + await writeDataset(`datastes/chart/${chartName}/metrics.json`, result); +} + +const chartName = process.argv[2]; +if (!chartName) { + console.error('Please provide a chart name as an argument.'); + process.exit(1); +} + +evalMetrics(chartName).catch((error) => { + console.error('Error generating metrics:', error); +}); diff --git a/evaluations/scripts/helpers/agent-request.js b/evaluations/scripts/helpers/agent-request.js new file mode 100644 index 0000000..414eec6 --- /dev/null +++ b/evaluations/scripts/helpers/agent-request.js @@ -0,0 +1,42 @@ +import fetch from 'node-fetch'; +import { PROJECT_CONFIG } from '../constants/index.js'; +console.log('PROJECT_CONFIG: ', PROJECT_CONFIG); + +export const requestAgent = async (query) => { + const data = { + ...PROJECT_CONFIG.agent.data, + query, + }; + + const response = await fetch(`${PROJECT_CONFIG.agent.url}/api/v1/agent/completion_chat`, { + method: 'POST', + headers: { + ...PROJECT_CONFIG.agent.headers, + }, + body: JSON.stringify(data), + }); + + const result = await response.json(); + + if (result.success) { + const contents = result.data.contents; + // console.log('contents: ', contents); + + const fristContent = contents[0]; + const { related, content } = fristContent; + let response = content.text; + + // 提取代码块 + if (response.includes('```json\n') && response.includes('\n```')) { + const pattern = /```json\n([\s\S]+)\n```/; + const result = pattern.exec(response); + response = JSON.stringify(JSON.parse(result[1])); + } + + const reference = related ? related.map((item) => item.title) : []; + + return { response, reference }; + } + + return result; +}; diff --git a/evaluations/scripts/helpers/chart-schema.js b/evaluations/scripts/helpers/chart-schema.js new file mode 100644 index 0000000..9e928a8 --- /dev/null +++ b/evaluations/scripts/helpers/chart-schema.js @@ -0,0 +1,229 @@ +/** + * 判断输出图表配置可信度 + * @returns 0 为错误情况,1 为准确 + */ +export function chartsSchemaCorrectness(response, answer) { + if (typeof answer !== 'object' || !answer.type) { + return 0; + } + + const validators = { + 'mind-map': isHierarchicalData, + 'organization-chart': isHierarchicalData, + 'fishbone-diagram': isHierarchicalData, + 'flow-diagram': isNetworkData, + 'network-graph': isNetworkData, + }; + + const validate = validators[answer.type]; + if (validate) { + return validate(response.data) ? 1 : 0; + } + + return plotsSchemaCorrectness(response, answer); +} + +/** + * 判断输出的统计图表配置可信度 + * @returns 0 为错误情况,1 为准确 + */ +function plotsSchemaCorrectness(response, answer) { + const keys = Object.keys(answer); + const validkeys = ['type']; + const ignorekeys = ['title', 'axisXTitle', 'axisYTitle']; + + for (let index = 0; index < keys.length; index++) { + const key = keys[index]; + const answer_value = answer[key]; + const response_value = response[key]; + + // // 值不相等的情况 + if (answer_value === response_value) { + continue; + } + + /** 以下是,值不相等的情况 */ + + if (ignorekeys.includes(key)) { + continue; + } + + if (validkeys.includes(key)) { + return 0; + } + + if (key === 'data') { + const dataCorrectness = chartsDataCorrectness(response_value, answer_value); + if (dataCorrectness === 0) { + return 0; + } + } + + return 1; + } + + return 1; +} + +/** + * 判断统计图表的 data 数据可信度 + * @returns 0 为错误情况,1 为准确 + */ +function chartsDataCorrectness(responseData, answerData) { + if (!Array.isArray(answerData) || !Array.isArray(responseData)) { + return 0; + } + + if (responseData.length !== answerData.length) { + return 0; + } + + const ansDataItemKeys = Object.keys(answerData[0]).sort(); + const resDataItemKeys = Object.keys(responseData[0]).sort(); + if (ansDataItemKeys.toString() !== resDataItemKeys.toString()) { + return 0; + } + + return 1; +} + +/** + * 验证数据是否为层次数据格式 + */ +function isHierarchicalData(data) { + if (!data || typeof data.name !== 'string') { + return false; + } + + if (!data.children) { + if (!Array.isArray(data.children)) { + return false; + } + + for (const child of data.children) { + if (!isHierarchicalData(child)) { + return false; + } + } + } + + return true; +} + +/** + * 验证数据是否为网络数据格式 + */ +function isNetworkData(data) { + if ( + !data || + typeof data !== 'object' || + !Array.isArray(data.nodes) || + !Array.isArray(data.edges) + ) { + return false; + } + + for (const node of data.nodes) { + if (typeof node.name !== 'string') { + return false; + } + } + const nodeNames = data.nodes.map((node) => node.name); + + for (const edge of data.edges) { + if ( + typeof edge.source !== 'string' || + typeof edge.target !== 'string' || + !nodeNames.includes(edge.source) || + !nodeNames.includes(edge.target) || + (edge.name && typeof edge.name !== 'string') + ) { + return false; + } + } + + return true; +} + +export function isChartsSchemaValid(data) { + if (data.type === 'line') { + return isLineChartValid(data); + } + + if (data.type === 'column') { + return isColumnValid(data); + } + + return false; +} + +function isLineChartValid(data) { + if (data.type !== 'line' || !Array.isArray(data.data)) { + return false; + } + + for (let item of data.data) { + if ( + (typeof item.time !== 'string' && typeof item.time !== 'number') || + typeof item.value !== 'number' + ) { + return false; + } + if (item.group && typeof item.group !== 'string') { + return false; + } + } + + if (data.title && typeof data.title !== 'string') { + return false; + } + if (data.axisXTitle && typeof data.axisXTitle !== 'string') { + return false; + } + if (data.axisYTitle && typeof data.axisYTitle !== 'string') { + return false; + } + + return true; +} + +function isColumnValid(data) { + // 判断是否是对象 + if (typeof data !== 'object' || data === null) { + return false; + } + // 判断 type 属性是否符合要求 + if (data.type !== 'column') { + return false; + } + // 判断 data 属性是否符合要求 + if ( + !Array.isArray(data.data) || + data.data.some( + (item) => + typeof item !== 'object' || + typeof item.category !== 'string' || + typeof item.value !== 'number' || + (item.group && typeof item.group !== 'string'), + ) + ) { + return false; + } + // 判断其他可选属性是否符合要求 + if (data.group && typeof data.group !== 'boolean') { + return false; + } + if (data.stack && typeof data.stack !== 'boolean') { + return false; + } + if (data.title && typeof data.title !== 'string') { + return false; + } + if (data.axisXTitle && typeof data.axisXTitle !== 'string') { + return false; + } + if (data.axisYTitle && typeof data.axisYTitle !== 'string') { + return false; + } + return true; +} diff --git a/evaluations/scripts/helpers/evaluate-text.js b/evaluations/scripts/helpers/evaluate-text.js new file mode 100644 index 0000000..6975441 --- /dev/null +++ b/evaluations/scripts/helpers/evaluate-text.js @@ -0,0 +1,109 @@ +import _ from 'lodash'; + +// 计算词频 +function getCharFrequencyVector(str) { + const vector = {}; + for (const char of str) { + if (vector[char]) { + vector[char]++; + } else { + vector[char] = 1; + } + } + return vector; +} + +function dotProduct(vec1, vec2) { + let product = 0; + for (const key in vec1) { + if (vec2[key]) { + product += vec1[key] * vec2[key]; + } + } + return product; +} + +function magnitude(vec) { + let sum = 0; + for (const key in vec) { + sum += vec[key] ** 2; + } + return Math.sqrt(sum); +} + +/** 计算余弦相似度 */ +function cosineSimilarity(str1, str2) { + const vec1 = getCharFrequencyVector(str1); + const vec2 = getCharFrequencyVector(str2); + + const dotProd = dotProduct(vec1, vec2); + const magnitude1 = magnitude(vec1); + const magnitude2 = magnitude(vec2); + + // 如果任意一个向量的模为0(即字符串为空或无共同字符),则相似度为0 + if (magnitude1 === 0 || magnitude2 === 0) return 0; + + return dotProd / (magnitude1 * magnitude2); +} + +/** 计算 jaccard 相似度 */ +function jaccardSimilarity(words1, words2) { + // 并集 + const union = _.union(words1, words2); + if (union.length === 0) return 0; + + // 交集 + const intersection = _.intersection(words1, words2); + + // 计算 Jaccard 相似度 + const similarity = intersection.length / union.length; + + return similarity; +} + +function cleanAndTokenizeText(inputText) { + const regex = /]*)>(.*?)<\/vis-text>/g; + const text = inputText.replaceAll('\\', '').replaceAll("'", '"'); + const tokens = []; + let match; + + while ((match = regex.exec(text)) !== null) { + const attributesString = match[1]; + const innerText = match[2]; + + // 提取标签属性类型和值 + const typeMatch = /type=(?:"([^"]+)"|([^\s>]+))/g.exec(attributesString); + if (typeMatch) { + tokens.push(`${typeMatch[0]}`); + } + + // 添加标签内部的文本 + if (innerText) { + tokens.push(innerText); + } + } + + // 从原始文本中移除 标签 + const plainText = text.replace(/]*>(.*?)<\/vis-text>/g, ''); + + // 将去掉标签的文本进行简单分词 + const plainTextTokens = plainText.split(/[\s,。]+/); + // 合并标签词汇和普通词汇 + return tokens + .concat(plainTextTokens) + .map((token) => token) + .filter((item) => item && item !== "'" && item !== '"'); // 暂忽略 \\ +} + +export const isText = (inputText) => { + return inputText.includes(''); +}; + +export const evaluateText = (answer, generation) => { + const sourceWords = cleanAndTokenizeText(answer); + const targetWords = cleanAndTokenizeText(generation); + // const jaccardScore = jaccardSimilarity(sourceWords, targetWords) + // 经测试,余弦相似度比较合适 + const cosineScore = cosineSimilarity(sourceWords, targetWords); + return cosineScore; +}; diff --git a/evaluations/scripts/helpers/evaluate.js b/evaluations/scripts/helpers/evaluate.js new file mode 100644 index 0000000..b611d25 --- /dev/null +++ b/evaluations/scripts/helpers/evaluate.js @@ -0,0 +1,80 @@ +import { requestAgent } from './agent-request.js'; +import { chartsSchemaCorrectness } from './chart-schema.js'; +import { evaluateText, isText } from './evaluate-text.js'; + +export const getEvalDataset = async (datasets) => { + console.log('datasets count: ', datasets.length); + console.log('Beginning request eval LLM...'); + + const eval_datasets = []; + + for (const { type, question, answer } of datasets) { + const eval_dataset = { + type, + question, + response: '', + answer: JSON.stringify(answer), + reference: [], + }; + try { + const { response, reference } = await requestAgent(question); + eval_dataset.response = response; + eval_dataset.reference = reference; + } catch (error) { + console.log('Get eval dataset warn: ', error); + } + eval_datasets.push(eval_dataset); + } + + return eval_datasets; +}; + +export const evaluate = async (datasets) => { + console.log('datasets count: ', datasets.length); + console.log('Beginning eval datasets...'); + + const eval_datasets = []; + + for (const eval_dataset of datasets) { + const { question, answer, response, reference } = eval_dataset; + + if (reference.length) { + if (isText(answer)) { + // 文本测评单独的链路 + eval_dataset.correctness = evaluateText(answer, response); + eval_datasets.push(eval_dataset); + continue; + } + try { + const answerData = JSON.parse(answer); + const responseData = JSON.parse(response); + // 可信度 + eval_dataset.correctness = chartsSchemaCorrectness(responseData, answerData); + // eval_dataset.correctness = isChartsSchemaValid(responseData) ? 1 : 0; + // const answerData = JSON.parse(answer); + // if ( + // JSON.stringify(responseData.data) === JSON.stringify(answerData.data) + // ) { + // eval_dataset.correctness = 1; + // } else { + // eval_dataset.correctness = 0.5; + // } + } catch (error) { + console.log('Evaluate warn: ', question, error); + eval_dataset.correctness = 0; + } + } else { + eval_dataset.correctness = 0; + } + + eval_datasets.push(eval_dataset); + } + + const count = eval_datasets.length; + const sum = eval_datasets + .map((item) => item.correctness) + .reduce((total, current) => total + current, 0); + console.log(`Evaluate result: ${sum}/${count} => ${sum / count}`); + + return eval_datasets; +}; diff --git a/evaluations/scripts/helpers/markdown2txt.js b/evaluations/scripts/helpers/markdown2txt.js new file mode 100644 index 0000000..2d6672a --- /dev/null +++ b/evaluations/scripts/helpers/markdown2txt.js @@ -0,0 +1,68 @@ +import inquirer from 'inquirer'; +import fs from 'node:fs'; +import path from 'node:path'; + +const knowledgePath = '../knowledges'; +const savetPath = '../knowledges'; + +/** + * 获取知识库下的所有文件 + */ +const getKnowledgeFiles = (folderPath) => { + return fs + .readdirSync(folderPath) + .filter((file) => fs.lstatSync(path.join(folderPath, file)).isFile()); +}; + +const selectFile = async (files) => { + const answers = await inquirer.prompt([ + { + type: 'list', + name: 'selectedFile', + message: '请选择目标文件:', + choices: files, + }, + ]); + return answers.selectedFile; +}; + +const replacerCodeBlock = (content) => { + const usageTypeCodeRegex = /```typescript([\s\S]*?)```/g; + + let _tcontent = content.replace(usageTypeCodeRegex, (match) => { + return match.replace(/```typescript|```/g, '').trim(); + }); + + const usageExampleCodeRegex = /(```json([\s\S]*?)```)/g; + + _tcontent = _tcontent.replace(usageExampleCodeRegex, (match) => { + return JSON.stringify(JSON.parse(match.replace(/```json|```/g, '').trim())); + }); + + return _tcontent; +}; + +const generateTxt = async (filePath, name, savetPath) => { + const content = fs.readFileSync(filePath, 'utf-8'); + + const knowledge = replacerCodeBlock(content); + + const txtFilePath = `${savetPath}/${name}.txt`; + if (!fs.existsSync(txtFilePath)) { + fs.mkdirSync(path.dirname(txtFilePath), { recursive: true }); + } + fs.writeFileSync(txtFilePath, knowledge, 'utf8'); +}; + +const run = async () => { + const files = getKnowledgeFiles(knowledgePath); + const selectedFile = await selectFile(files); + + const name = path.parse(selectedFile).name; + + console.log(`根据 ${selectedFile} 生成 txt 并保存到 ${savetPath}`); + + await generateTxt(path.join(knowledgePath, selectedFile), name, savetPath); +}; + +run(); diff --git a/evaluations/scripts/helpers/read-dataset.js b/evaluations/scripts/helpers/read-dataset.js new file mode 100644 index 0000000..200f15c --- /dev/null +++ b/evaluations/scripts/helpers/read-dataset.js @@ -0,0 +1,21 @@ +import { readFile, writeFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { __dirProject } from '../constants/index.js'; + +export const readDataset = async (filePath) => { + const absolutefilePath = resolve(__dirProject, filePath); + + const content = await readFile(absolutefilePath, 'utf-8'); + + const data = JSON.parse(content); + + return data; +}; + +export const writeDataset = async (filePath, content) => { + const absolutefilePath = resolve(__dirProject, filePath); + + const data = JSON.stringify(content); + + await writeFile(absolutefilePath, data, 'utf-8'); +}; diff --git a/evaluations/scripts/helpers/read-knowledge.js b/evaluations/scripts/helpers/read-knowledge.js new file mode 100644 index 0000000..2e3750c --- /dev/null +++ b/evaluations/scripts/helpers/read-knowledge.js @@ -0,0 +1,16 @@ +import { readFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { __dirProject } from '../constants/index.js'; + +export const readKnowledge = async (fileName) => { + const filePath = resolve(__dirProject, '../knowledges/' + fileName); + + const content = await readFile(filePath, 'utf-8'); + + const regex = /## 图表用法([\s\S]*?)## 使用示例/; + const match = content.match(regex); + + const filtered = match[1].trim(); + + return filtered; +}; diff --git a/evaluations/scripts/prompt/column-data2chart.js b/evaluations/scripts/prompt/column-data2chart.js new file mode 100644 index 0000000..cca07d3 --- /dev/null +++ b/evaluations/scripts/prompt/column-data2chart.js @@ -0,0 +1,66 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './text2chart.js'; + +const knowledge = await readKnowledge('柱形图 - Column Chart.md'); + +const examples = [ + // { + // question: + // '用柱形图可视化我的数据 [{ "title": "第一产业","industrial": 7200.0 },{ "title": "第二产业", "industrial": 36600.0 },{ "title": "第三产业" ,"industrial": 41000.0 }]', + // answer: { + // type: 'column', + // data: [ + // { category: '第一产业', value: 7200.0 }, + // { category: '第二产业', value: 36600.0 }, + // { category: '第三产业', value: 41000.0 }, + // ], + // axisXTitle: 'title', + // axisYTitle: 'industrial', + // }, + // }, + { + question: + "用堆叠柱形图可视化我不同城市的客户数量,数据如下:{ 'City A': { '2020': 1000, '2021': 1200 }, 'City B': { '2020': 1500, '2021': 1800 }, 'City C': { '2020': 2000, '2021': 2500 } }", + answer: { + type: 'column', + data: [ + { category: '2020', value: 1000, group: 'City A' }, + { category: '2021', value: 1200, group: 'City A' }, + { category: '2020', value: 1500, group: 'City B' }, + { category: '2021', value: 1800, group: 'City B' }, + { category: '2020', value: 2000, group: 'City C' }, + { category: '2021', value: 2500, group: 'City C' }, + ], + stack: true, + axisXTitle: '年份', + axisYTitle: '客户数量', + }, + }, + { + question: + "用分组柱形图可视化我不同季度的销售数据,数据如下:{ 'Q1': { '2020': 10000, '2021': 12000 }, 'Q2': { '2020': 15000, '2021': 18000 }, 'Q3': { '2020': 20000, '2021': 25000 }, 'Q4': { '2020': 25000, '2021': 30000 } }", + answer: { + type: 'column', + data: [ + { category: '2020', value: 10000, group: 'Q1' }, + { category: '2021', value: 12000, group: 'Q1' }, + { category: '2020', value: 15000, group: 'Q2' }, + { category: '2021', value: 18000, group: 'Q2' }, + { category: '2020', value: 20000, group: 'Q3' }, + { category: '2021', value: 25000, group: 'Q3' }, + { category: '2020', value: 25000, group: 'Q4' }, + { category: '2021', value: 30000, group: 'Q4' }, + ], + group: true, + axisXTitle: '年份', + axisYTitle: '售量', + }, + }, +]; + +const prompt = getBasePrompt('柱形图', knowledge, examples, 5); + +console.log('prompt: ', prompt); + +await writeFile('prompts/column/data2chart.md', prompt, 'utf8'); diff --git a/evaluations/scripts/prompt/column-text2chart.js b/evaluations/scripts/prompt/column-text2chart.js new file mode 100644 index 0000000..5f48c33 --- /dev/null +++ b/evaluations/scripts/prompt/column-text2chart.js @@ -0,0 +1,91 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './text2chart.js'; + +const knowledge = await readKnowledge('柱形图 - Column Chart.md'); + +const examples = [ + { + question: + '海底捞公司外卖收入的变化,2015 年收入金额 80 百万元,2016 年收入金额 140 百万元,2017 年收入金额 220 百万元。用柱形图可视化', + answer: { + type: 'column', + data: [ + { category: '2015 年', value: 80 }, + { category: '2016 年', value: 140 }, + { category: '2017 年', value: 220 }, + ], + title: '海底捞公司外卖收入', + axisXTitle: '年份', + axisYTitle: '金额 (百万元)', + }, + }, + // { + // question: + // '根据预测,专家估计到 2030 年这些国家 GDP 将达到,美国 GDP 750 万亿,印度 GDP 420 万亿,英国 GDP 420 万亿,中国 GDP 700 万亿。用柱形图可视化', + // answer: { + // type: 'column', + // data: [ + // { category: '美国', value: 750 }, + // { category: '印度', value: 420 }, + // { category: '英国', value: 900 }, + // { category: '中国', value: 700 }, + // ], + // title: '预计 2030 GDP', + // axisXTitle: '国家', + // axisYTitle: '金额 (万亿)', + // }, + // }, + // { + // question: + // '主要城市油车与新能源汽车的售卖量对比,北京分别是 825.6 万辆 与 60.2 万辆,上海分别是 450 万辆 与 95 万辆,深圳分别是 506 万辆 与 76.7 万辆,广州分别是 976.6 万辆 与 97.2 万辆,杭州分别是 651.2 万辆 与 62 万辆。用分组柱形图可视化', + // answer: { + // type: 'column', + // data: [ + // { category: '北京', value: 825.6, group: '油车' }, + // { category: '北京', value: 60.2, group: '新能源汽车' }, + // { category: '上海', value: 450, group: '油车' }, + // { category: '上海', value: 95, group: '新能源汽车' }, + // { category: '深圳', value: 506, group: '油车' }, + // { category: '深圳', value: 76.7, group: '新能源汽车' }, + // { category: '广州', value: 976.6, group: '油车' }, + // { category: '广州', value: 97.2, group: '新能源汽车' }, + // { category: '杭州', value: 651.2, group: '油车' }, + // { category: '杭州', value: 62, group: '新能源汽车' }, + // ], + // group: true, + // title: '主要城市油车与新能源汽车售卖量', + // axisXTitle: '城市', + // axisYTitle: '售卖量 (万辆)', + // }, + // }, + // { + // question: + // '主要城市油车与新能源汽车的售卖量对比,北京分别是 825.6 万辆 与 60.2 万辆,上海分别是 450 万辆 与 95 万辆,深圳分别是 506 万辆 与 76.7 万辆,广州分别是 976.6 万辆 与 97.2 万辆,杭州分别是 651.2 万辆 与 62 万辆。用堆叠柱形图可视化', + // answer: { + // type: 'column', + // data: [ + // { category: '北京', value: 825.6, group: '油车' }, + // { category: '北京', value: 60.2, group: '新能源汽车' }, + // { category: '上海', value: 450, group: '油车' }, + // { category: '上海', value: 95, group: '新能源汽车' }, + // { category: '深圳', value: 506, group: '油车' }, + // { category: '深圳', value: 76.7, group: '新能源汽车' }, + // { category: '广州', value: 976.6, group: '油车' }, + // { category: '广州', value: 97.2, group: '新能源汽车' }, + // { category: '杭州', value: 651.2, group: '油车' }, + // { category: '杭州', value: 62, group: '新能源汽车' }, + // ], + // stack: true, + // title: '主要城市油车与新能源汽的售卖量', + // axisXTitle: '城市', + // axisYTitle: '售卖量 (万辆)', + // }, + // }, +]; + +const prompt = getBasePrompt('柱形图', knowledge, examples, 5); + +console.log('prompt: ', prompt); + +await writeFile('prompts/column/text2chart.md', prompt, 'utf8'); diff --git a/evaluations/scripts/prompt/data2chart.js b/evaluations/scripts/prompt/data2chart.js new file mode 100644 index 0000000..803125e --- /dev/null +++ b/evaluations/scripts/prompt/data2chart.js @@ -0,0 +1,27 @@ +export const getBasePrompt = (chartName, chartUssge, examples, count = 5) => ` +## 角色 + +你是一个 mock 图表数据生成器,生成${chartName}相关的可视化问答对数据。 + +## 任务 + +1. 结合可视化场景,随机生成${chartName}相关的可视化数据,主要内容为可视化的数据和用什么可视化图表,比如: “${ + examples[0].question +}” +2. 根据可视化相关问题,生成${chartName}图表的配置 +3. 以 JSON 格式归纳为一条问答对数据,{"question": <可视化问题>,"answer": <图表的配置>} + +## ${chartName}图表知识库 + +${chartUssge} + +## 参考例子 + +\`\`\`json +${JSON.stringify(examples.map((item) => ({ type: 'data2chart', ...item })))} +\`\`\` + +## 要求 + +- 请生成 ${count} 条这样的记录,并以 JSON 格式输出。 +`; diff --git a/evaluations/scripts/prompt/generate-prompts.js b/evaluations/scripts/prompt/generate-prompts.js new file mode 100644 index 0000000..8b27b76 --- /dev/null +++ b/evaluations/scripts/prompt/generate-prompts.js @@ -0,0 +1,140 @@ +import inquirer from 'inquirer'; +import _ from 'lodash'; +import fs from 'node:fs'; +import path from 'node:path'; +import { getBasePrompt as getBaseDataPrompt } from './data2chart.js'; +import { getBasePrompt as getBaseTextPrompt } from './text2chart.js'; + +const { kebabCase } = _; + +const knowledgePath = '../knowledges'; +const promptPath = './prompts'; + +/** + * 获取知识库下的所有文件 + */ +const getKnowledgeFiles = (folderPath) => { + return fs + .readdirSync(folderPath) + .filter((file) => fs.lstatSync(path.join(folderPath, file)).isFile()); +}; + +const selectFile = async (files) => { + const answers = await inquirer.prompt([ + { + type: 'list', + name: 'selectedFile', + message: '请选择目标文件:', + choices: files, + }, + ]); + return answers.selectedFile; +}; + +const inputChartName = async (defaultName) => { + const answers = await inquirer.prompt([ + { + type: 'input', + name: 'chartName', + message: '请输入资产名称(留空则使用默认名称):', + default: defaultName, + }, + ]); + return answers.chartName; +}; + +const inputRecordCount = async () => { + const answers = await inquirer.prompt([ + { + type: 'input', + name: 'count', + message: '请输入生成问答对的数量:', + default: 5, + }, + ]); + return Number(answers.count); +}; + +const readKnowledge = async (content) => { + const regex = /## 图表用法([\s\S]*?)## 使用示例/; + const match = content.match(regex); + + const filtered = match[1].trim(); + + return filtered; +}; + +const generatePrompts = async (filePath, nameZh, chartPromptPath) => { + const content = fs.readFileSync(filePath, 'utf-8'); + + const usageExampleRegex = /(\d+\.\s[\s\S]*?)(```json[\s\S]*?```)/g; + const usageExamples = [...content.matchAll(usageExampleRegex)].map((match) => ({ + text: match[1].trim(), + code: match[2].trim(), + })); + + console.log(`抽取的文件中包含 ${usageExamples.length} 个使用示例,请依次选择对应的类型:`); + + const text2chartExamples = []; + const data2chartExamples = []; + + for (const example of usageExamples) { + const answers = await inquirer.prompt([ + { + type: 'list', + name: 'category', + message: `请选择示例的分类:\n${example.text}\n${example.code}`, + choices: ['text2chart', 'data2chart', 'skip'], + }, + ]); + + const format = (example) => ({ + question: example.text.replace(/\d+\.\s/, ''), + answer: JSON.parse(example.code.replace(/```json|```/g, '').trim()), + }); + + if (answers.category === 'text2chart') { + text2chartExamples.push(format(example)); + } else if (answers.category === 'data2chart') { + data2chartExamples.push(format(example)); + } + } + + const knowledge = await readKnowledge(content); + const recordCount = await inputRecordCount(); + + const text2chartFilePath = `${chartPromptPath}/text2chart.md`; + if (!fs.existsSync(text2chartFilePath)) { + fs.mkdirSync(path.dirname(text2chartFilePath), { recursive: true }); + } + fs.writeFileSync( + text2chartFilePath, + getBaseTextPrompt(nameZh, knowledge, text2chartExamples, recordCount), + 'utf8', + ); + + const data2chartFilePath = `${chartPromptPath}/data2chart.md`; + if (!fs.existsSync(data2chartFilePath)) { + fs.mkdirSync(path.dirname(data2chartFilePath), { recursive: true }); + } + fs.writeFileSync( + data2chartFilePath, + getBaseDataPrompt(nameZh, knowledge, data2chartExamples, recordCount), + 'utf8', + ); +}; + +const run = async () => { + const files = getKnowledgeFiles(knowledgePath); + const selectedFile = await selectFile(files); + + const [nameZh, nameEn] = path.parse(selectedFile).name.split('-'); + + const chartFolderName = await inputChartName(kebabCase(nameEn)); + const chartPromptPath = path.join(promptPath, chartFolderName); + console.log(`根据 ${selectedFile} 生成 prompt 并保存到 ${chartPromptPath}`); + + await generatePrompts(path.join(knowledgePath, selectedFile), nameZh.trim(), chartPromptPath); +}; + +run(); diff --git a/evaluations/scripts/prompt/line-data2chart.js b/evaluations/scripts/prompt/line-data2chart.js new file mode 100644 index 0000000..eeb6f94 --- /dev/null +++ b/evaluations/scripts/prompt/line-data2chart.js @@ -0,0 +1,48 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './data2chart.js'; + +const knowledge = await readKnowledge('折线图 - Line Chart.md'); + +const examples = [ + // { + // question: + // '用折线图可视化我的数据 [{ "year": 2015,"industrial": 7200.0 },{ "year": 2016, "industrial": 3660.0 },{ "year": 2017 ,"industrial": 4100.0 }]', + // answer: { + // type: 'line', + // data: [ + // { time: 2015, value: 7200.0 }, + // { time: 2016, value: 3660.0 }, + // { time: 2017, value: 4100.0 }, + // ], + // axisXTitle: 'year', + // axisYTitle: 'industrial', + // }, + // }, + { + question: + '用折线图可视化我的数据 [{"quarter":"Q1","sales":1540,"product":"家具"},{"quarter":"Q1","sales":2540,"product":"电子产品"},{"quarter":"Q1","sales":500,"product":"办公用品"},{"quarter":"Q2","sales":2000,"product":"家具"},{"quarter":"Q2","sales":3000,"product":"电子产品"},{"quarter":"Q2","sales":1000,"product":"办公用品"},{"quarter":"Q3","sales":4500,"product":"家具"},{"quarter":"Q3","sales":6500,"product":"电子产品"},{"quarter":"Q3","sales":2500,"product":"办公用品"}]', + answer: { + type: 'line', + data: [ + { time: 'Q1', value: 1540.0, group: '家具' }, + { time: 'Q1', value: 2540.0, group: '电子产品' }, + { time: 'Q1', value: 500.0, group: '办公用品' }, + { time: 'Q2', value: 2000.0, group: '家具' }, + { time: 'Q2', value: 3000.0, group: '电子产品' }, + { time: 'Q2', value: 1000.0, group: '办公用品' }, + { time: 'Q3', value: 4500.0, group: '家具' }, + { time: 'Q3', value: 6500.0, group: '电子产品' }, + { time: 'Q3', value: 2500.0, group: '办公用品' }, + ], + axisXTitle: 'quarter', + axisYTitle: 'sales', + }, + }, +]; + +const linePrompt = getBasePrompt('折线图', knowledge, examples, 10); + +console.log('linePrompt: ', linePrompt); + +await writeFile('prompts/line/data2chart.md', linePrompt, 'utf8'); diff --git a/evaluations/scripts/prompt/line-text2chart.js b/evaluations/scripts/prompt/line-text2chart.js new file mode 100644 index 0000000..a016617 --- /dev/null +++ b/evaluations/scripts/prompt/line-text2chart.js @@ -0,0 +1,85 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './text2chart.js'; + +const knowledge = await readKnowledge('折线图 - Line Chart.md'); + +const examples = [ + { + question: + '我国出生人口 2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化上面的数据', + answer: { + type: 'line', + data: [ + { time: '2015 年', value: 1700 }, + { time: '2016 年', value: 1500 }, + { time: '2017 年', value: 1200 }, + ], + title: '出生人口变化', + axisXTitle: '年份', + axisYTitle: '出生人口(万人)', + }, + }, + { + question: + '公司季度业绩显示,第一季度销售额为 500 万美元,第二季度为 600 万美元,第三季度为 700 万美元,第四季度为 800 万美元。使用折线图可视化这些数据。', + answer: { + type: 'line', + data: [ + { time: '第一季度', value: 500 }, + { time: '第二季度', value: 600 }, + { time: '第三季度', value: 700 }, + { time: '第四季度', value: 800 }, + ], + title: '公司季度业绩', + axisXTitle: '季度', + axisYTitle: '销售额(万美元)', + }, + }, + // { + // question: + // '一项研究跟踪了五个国家在过去十年里每年森林覆盖率的变化,其中中国从2010年的20%增长到了2020年的25%,印度从20%增长至23%,巴西从60%降至55%,俄罗斯从45%增至50%,加拿大保持在30%不变。请用多条折线图展示各国森林覆盖率的变化。', + // answer: { + // type: 'line', + // data: [ + // { time: '2010年', value: 20, group: '中国' }, + // { time: '2020年', value: 25, group: '中国' }, + // { time: '2010年', value: 20, group: '印度' }, + // { time: '2020年', value: 23, group: '印度' }, + // { time: '2010年', value: 60, group: '巴西' }, + // { time: '2020年', value: 55, group: '巴西' }, + // { time: '2010年', value: 45, group: '俄罗斯' }, + // { time: '2020年', value: 50, group: '俄罗斯' }, + // { time: '2010年', value: 30, group: '加拿大' }, + // { time: '2020年', value: 30, group: '加拿大' }, + // ], + // title: '各国森林覆盖率变化', + // axisXTitle: '年份', + // axisYTitle: '森林覆盖率(%)', + // }, + // }, + // { + // question: + // '我国出生人口与死亡人口,2015 年分别是 1700 万人与 965 万人,2016 年分别是出生人口 1500 万人与 846 万人,2017 年分别是出生人口 1200 万人与 782 万人。用多折线图可视化', + // answer: { + // type: 'line', + // data: [ + // { time: '2015 年', value: 1700, group: '出生人口' }, + // { time: '2015 年', value: 965, group: '死亡人口' }, + // { time: '2016 年', value: 1500, group: '出生人口' }, + // { time: '2016 年', value: 846, group: '死亡人口' }, + // { time: '2017 年', value: 1200, group: '出生人口' }, + // { time: '2017 年', value: 782, group: '死亡人口' }, + // ], + // title: '出生人口与死亡人口变化', + // axisXTitle: '年份', + // axisYTitle: '人口(万人)', + // }, + // }, +]; + +const linePrompt = getBasePrompt('折线图', knowledge, examples, 10); + +console.log('linePrompt: ', linePrompt); + +await writeFile('prompts/line/text2chart.md', linePrompt, 'utf8'); diff --git a/evaluations/scripts/prompt/pie-data2chart.js b/evaluations/scripts/prompt/pie-data2chart.js new file mode 100644 index 0000000..81bf343 --- /dev/null +++ b/evaluations/scripts/prompt/pie-data2chart.js @@ -0,0 +1,26 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './data2chart.js'; + +const knowledge = await readKnowledge('饼图 - Pie Chart.md'); + +const examples = [ + { + question: + '用饼图可视化我的数据 [{ "name": "第一产业","industrial": 7200.0 },{ "name": "第二产业", "industrial": 36600.0 },{ "name": "第三产业" ,"industrial": 41000.0 }]', + answer: { + type: 'bar', + data: [ + { category: '第一产业', value: 7200.0 }, + { category: '第二产业', value: 36600.0 }, + { category: '第三产业', value: 41000.0 }, + ], + }, + }, +]; + +const prompt = getBasePrompt('饼图', knowledge, examples, 5); + +console.log('prompt: ', prompt); + +await writeFile('prompts/pie/data2chart.md', prompt, 'utf8'); diff --git a/evaluations/scripts/prompt/pie-text2chart.js b/evaluations/scripts/prompt/pie-text2chart.js new file mode 100644 index 0000000..5268e5b --- /dev/null +++ b/evaluations/scripts/prompt/pie-text2chart.js @@ -0,0 +1,41 @@ +import { writeFile } from 'fs/promises'; +import { readKnowledge } from '../helpers/read-knowledge.js'; +import { getBasePrompt } from './text2chart.js'; + +const knowledge = await readKnowledge('饼图 - Pie Chart.md'); + +const examples = [ + { + question: + '根据预测,专家估计到 2030 年这些国家 GDP 将达到,美国 GDP 750 万亿,印度 GDP 420 万亿,英国 GDP 420 万亿,中国 GDP 700 万亿。用条形图可视化', + answer: { + type: 'pie', + data: [ + { category: '美国', value: 750 }, + { category: '印度', value: 420 }, + { category: '英国', value: 900 }, + { category: '中国', value: 700 }, + ], + title: '预计 2030 GDP', + }, + }, + { + question: + '全国人口中居住在城镇的人口占比为 63.89%,居住在乡村的人口占比为 36.11%。用环图展示数据', + answer: { + type: 'pie', + data: [ + { category: '城镇人口', value: 63.89 }, + { category: '乡村人口', value: 36.11 }, + ], + innerRadius: 0.6, + title: '全国人口居住对比', + }, + }, +]; + +const prompt = getBasePrompt('饼图', knowledge, examples, 5); + +console.log('prompt: ', prompt); + +await writeFile('prompts/pie/text2chart.md', prompt, 'utf8'); diff --git a/evaluations/scripts/prompt/text2chart.js b/evaluations/scripts/prompt/text2chart.js new file mode 100644 index 0000000..46c95e2 --- /dev/null +++ b/evaluations/scripts/prompt/text2chart.js @@ -0,0 +1,27 @@ +export const getBasePrompt = (chartName, chartUssge, examples, count = 5) => ` +## 角色 + +你是一个 mock 图表数据生成器,生成${chartName}相关的可视化问答对数据。 + +## 任务 + +1. 随机结合可视化场景,生成${chartName}相关的可视化问题,用自然语言纯文本描述,主要内容为数据描述和用什么可视化图表,比如: “${ + examples[0].question +}” +2. 根据可视化相关问题,生成${chartName}图表的配置 +3. 以 JSON 格式归纳为一条问答对数据,{"question": <可视化问题>,"answer": <图表的配置>} + +## ${chartName}图表知识库 + +${chartUssge} + +## 参考例子 + +\`\`\`json +${JSON.stringify(examples.map((item) => ({ type: 'text2chart', ...item })))} +\`\`\` + +## 要求 + +- 请生成 ${count} 条这样的记录,并以 JSON 格式输出。 +`; diff --git "a/knowledges/\346\212\230\347\272\277\345\233\276 - Line Chart.md" "b/knowledges/\346\212\230\347\272\277\345\233\276 - Line Chart.md" new file mode 100644 index 0000000..7799115 --- /dev/null +++ "b/knowledges/\346\212\230\347\272\277\345\233\276 - Line Chart.md" @@ -0,0 +1,119 @@ +## 图表属性 + +- 名称:折线图 +- 别名:线图,英文名 Line Chart +- 形状:折线 +- 图表类别:统计图表 +- 图表功能:比较、趋势 + +## 基础概念 + +折线图是是一个由笛卡尔坐标系(直角坐标系),一些点和线组成的统计图表,常用来表示数值随连续时间间隔或有序类别的变化。在折线图中,x 轴通常用作连续时间间隔或有序类别。y 轴用于量化的数据,如果为负值则绘制于 y 轴下方。连线用于连接两个相邻的数据点。 + +折线图用于分析事物随时间或有序类别而变化的趋势。从数据上来说,折线图需要一个连续时间字段或一个分类字段和至少一个连续数据字段。 + +## 适用场景 + +同一变量随时间或有序类别的变化,比如 2000 到 2016 年苹果电脑销售额在苹果利润的占比的变化趋势。 + +## 不适用场景 + +变量数值大多情况下为 0 + +## 图表用法 + +### 图表属性 + +```typescript +type Line = { + type: 'line'; + data: { time: string | number; value: number; group?: string }[]; + title?: string; + axisXTitle?: string; + axisYTitle?: string; +}; +``` + +### 数据要求 + +- type:图表的类型,必填,文本类型,值必须为 "line"。 +- data:图表的数据,必填,数组对象类型; + - time:数据的时序名称 ,必填,文本或数值类型; + - value:数据的值,必填,数值类型; + - group:数据分组名称,选填,文本类型; +- title: 图表的标题,选填,文本类型。 +- axisXTitle:x 轴的标题,选填,文本类型。 +- axisYTitle:y 轴的标题,选填,文本类型。 + +## 使用示例 + +1. 我国出生人口,2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化。 + +```json +{ + "type": "line", + "data": [ + { "time": "2015 年", "value": 1700 }, + { "time": "2016 年", "value": 1500 }, + { "time": "2017 年", "value": 1200 } + ], + "title": "出生人口变化", + "axisXTitle": "年份", + "axisYTitle": "出生人口(万人)" +} +``` + +2. 我国出生人口与死亡人口,2015 年分别是 1700 万人与 965 万人,2016 年分别是出生人口 1500 万人与 846 万人,2017 年分别是出生人口 1200 万人与 782 万人。用多折线图可视化。 + +```json +{ + "type": "line", + "data": [ + { "time": "2015 年", "value": 1700, "group": "出生人口" }, + { "time": "2015 年", "value": 965, "group": "死亡人口" }, + { "time": "2016 年", "value": 1500, "group": "出生人口" }, + { "time": "2016 年", "value": 846, "group": "死亡人口" }, + { "time": "2017 年", "value": 1200, "group": "出生人口" }, + { "time": "2017 年", "value": 782, "group": "死亡人口" } + ], + "title": "出生人口与死亡人口变化", + "axisXTitle": "年份", + "axisYTitle": "人口(万人)" +} +``` + +3. 用折线图可视化我的数据 [{ "year": 2015,"industrial": 7200.0 },{ "year": 2016, "industrial": 3660.0 },{ "year": 2017 ,"industrial": 4100.0 }]。 + +```json +{ + "type": "line", + "data": [ + { "time": 2015, "value": 7200.0 }, + { "time": 2016, "value": 3660.0 }, + { "time": 2017, "value": 4100.0 } + ], + "axisXTitle": "year", + "axisYTitle": "industrial" +} +``` + +4. 用折线图可视化我的数据 [{"quarter":"Q1","sales":1540,"product":"家具"},{"quarter":"Q1","sales":2540,"product":"电子产品"},{"quarter":"Q1","sales":500,"product":"办公用品"},{"quarter":"Q2","sales":2000,"product":"家具"},{"quarter":"Q2","sales":3000,"product":"电子产品"},{"quarter":"Q2","sales":1000,"product":"办公用品"},{"quarter":"Q3","sales":4500,"product":"家具"},{"quarter":"Q3","sales":6500,"product":"电子产品"},{"quarter":"Q3","sales":2500,"product":"办公用品"}]。 + +```json +{ + "type": "line", + "data": [ + { "time": "Q1", "value": 1540.0, "group": "家具" }, + { "time": "Q1", "value": 2540.0, "group": "电子产品" }, + { "time": "Q1", "value": 500.0, "group": "办公用品" }, + { "time": "Q2", "value": 2000.0, "group": "家具" }, + { "time": "Q2", "value": 3000.0, "group": "电子产品" }, + { "time": "Q2", "value": 1000.0, "group": "办公用品" }, + { "time": "Q3", "value": 4500.0, "group": "家具" }, + { "time": "Q3", "value": 6500.0, "group": "电子产品" }, + { "time": "Q3", "value": 2500.0, "group": "办公用品" } + ], + "axisXTitle": "quarter", + "axisYTitle": "sales" +} +``` diff --git "a/knowledges/\347\237\245\350\257\206\345\272\223\346\200\273\350\247\210.md" "b/knowledges/\347\237\245\350\257\206\345\272\223\346\200\273\350\247\210.md" new file mode 100644 index 0000000..5ef94fa --- /dev/null +++ "b/knowledges/\347\237\245\350\257\206\345\272\223\346\200\273\350\247\210.md" @@ -0,0 +1,305 @@ +## 介绍 + +本图表知识库的目的是为了提供一个全面、系统的资源,帮助理解、选择、创建各种数据可视化图表。图表是数据可视化的重要工具,选择合适的图表能够有效传达信息。 + +图表可以按照结构和性质被分为几个大类,按类别划分: + +- 统计图表:折线图、饼图等用来表示数据的统计或聚合结果的经典图表 +- 关系图:图论概念中的图,由点线关系组成 +- 地图:展示地理信息专用的图表 + +按照图表的功能(分析目的)分类,划分为: + +- 对比类 +- 趋势类 +- 分布类 +- 排名类 +- 占比类 +- 组成类 +- 关系类 +- 层级类 +- 流向类 +- 空间类 + +按照图表的形状(图形的形状)分类,划分为: + +- 线形 +- 条形 +- 圆形 +- 方形 +- 面形 +- 散点形 +- 对称形 +- 网络形 +- 地图 + +## 图表类型概览 + +### 统计图表 + +#### 折线图: + +- 图表属性: + - 名称:折线图 + - 别名:线图,英文名 Line Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +折线图常用来表示数值随连续时间间隔的变化,用于分析事物随时间而变化的趋势,从数据上,折线图需要一个连续时间字段。 + +- 适用场景: + +适用于时间序列数据,例如股票价格变化、温度变化等。 + +- 不适用场景: + +变量数值大多情况下为 0 + +#### 柱形图: + +- 图表属性: + - 名称:柱形图 + - 别名:柱状图,英文名:Column Chart + - 形状:柱形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +柱状图,是一种使用柱形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。 + +- 适用场景: + +柱状图最适合对分类的数据进行比较,例如销售额对比、人口分布等。尤其是当数值比较接近时,由于人眼对于高度的感知优于其他视觉元素(如面积、角度等),因此,使用柱状图更加合适。 + +- 不适用场景: + +柱状图要求至少一个分类变量,它们之间是离散的,不能是连续型变量。 + +#### 饼图: + +- 图表属性: + - 名称:饼图 + - 别名:饼状图,英文名 Pie Chart + - 形状:圆形 + - 图表类别:统计图表 + - 图表功能:比较、占比、成分 +- 基础概念: + +饼图,是一个划分为几个扇形的圆形统计图表。饼图最显著的功能在于表现“占比”。从数据来看,饼图一般需要一个分类数据字段、一个连续数据字段。值得注意的是,分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。 + +- 适用场景: + +用于显示组成部分的比例,如市场份额、预算分配等。想要突出表示某个部分在整体中所占比例。 + +- 不适用场景: + +如果变量之间相互独立,并不构成一个整体,那么不可以使用饼图。饼图也不能用来表现趋势。此外,当类别过多时,不建议使用饼图,否则阅读会将很差。可行的办法,一是将一些不重要的变量合并为“其他”,避免扇区超过 5 个;二是改用条形图。 + +#### 条形图: + +- 图表属性: + - 名称:条形图 + - 别名:条形图,英文名:Bar Chart + - 形状:条形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +条形图是一种使用水平矩形条对不同类别进行数值比较的统计图表。与柱状图不同的是,条形图的矩形条是从左到右排列的,而不是从下到上。条形图同样需要一个分类变量和一个数值变量。 + +- 适用场景: + +条形图适合对分类数据进行比较,尤其是在分类名称较长,或当分类项数量较多的情况下,由于条形图的水平排列更便于显示这些类别。 + +- 不适用场景: + +条形图不适合用于显示连续型变量之间的关系,且不适用于需要强调数值变化趋势时,因为条形图的重点在于分类间的比较。 + +#### 面积图: + +- 图表属性: + - 名称:面积图 + - 别名:区域图,英文名 Area Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,原理与折线图相似。而面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色填充。 + +- 适用场景: + +想要体现在连续自变量下,数据的趋势变化,同时也能够观察到数据总量的变化趋势。通常用于展示随时间变化的总量及其中各部分的变化。 + +- 不适用场景: + +自变量不是顺序性的变量,这种情况下并不适合用面积图 + +#### 散点图: + +- 图表属性: + - 名称:散点图 + - 别名:散点图,英文名:Scatter Chart + - 形状:散点 + - 图表类别:统计图表 + - 图表功能:比较、分别、趋势 +- 基础概念: + +散点图是一种显示两个变量之间关系的图表。通过将每个数据点表示为图上的一个点,散点图能够展示两个变量(通常是数值变量)之间的相关性或分布趋势 + +- 适用场景: + +发现两个变量之间的关系或趋势,例如相关性强度。显示数据的分布模式,检测异常值。数据点数量较大时,散点图能够有效呈现整体分布情况。 + +- 不适用场景: + +只有一个变量的情况,因为散点图需要两个数值变量来显示数据点的位置。 + +#### 词云图: + +- 图表属性: + - 名称:词云图 + - 别名:词云,英文名:Word Cloud + - 图表类别:统计图表 + - 图表功能:排名、趋势 +- 基础概念: + +词云图是一种通过不同大小和颜色的字体展示文本数据中词语出现频率的视觉效果。常见的大尺寸词汇表示频率高,小尺寸则表示频率低。 + +- 适用场景: + +主要用于展示文本数据的主题和关键词,帮助快速识别信息的重点,适用于社交媒体分析、产品评论分析、调查问卷结果等场合。 + +- 不适用场景: + +数据主要为数值型,不涉及文本。需要精确数值对比的场合。文本数据量过小,无法形成有效对比。 + +#### 双轴图: + +- 图表属性: + - 名称:双轴图 + - 别名:组合图,英文名:DualAxes Chart + - 形状:柱形、折线 + - 图表类别:组合图表 + - 图表功能:多维度比较、趋势分析 +- 基础概念: + +双轴图是一种结合两个不同图表类型的组合图表,通常是将柱状图与折线图结合起来显示。双轴图通过在一个图表中使用两个垂直 Y 轴(左侧和右侧),分别对应不同的数值维度。柱状图用于展示一组数据的大小或数量,而折线图则展示另一组数据的趋势。双轴图非常适合同时展示不同类型的数据变化趋势。 + +- 适用场景: + +同时展示两个具有不同数量级的数据,例如销售额和增长率。比较两组变量的相对变化趋势,如同时观察某时间段内的销量和利润率。数据维度不同且具有共同的 X 轴(例如时间、类别)。 + +- 不适用场景: + +数据类型相同且数量级相近时,单一类型图表(如折线图或柱状图)更简洁。无法找到具有相关性的两个数据维度进行比较时,双轴图的价值会降低。 + +### 关系图表 + +#### 网络图: + +- 图表属性: + - 名称:网络图 + - 别名:关系网络图,关系图,力导向图,Force 图,英文名 Network Graph、Force Graph + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +网络图(Network Graph)是一种展示实体(节点)之间的关系(边)的图。通过节点和边的连接,直观地表示复杂的网络结构。每个节点代表一个实体,而每条边则表示两个节点之间的关系或连接。网络图的关键就是展示“谁跟谁有联系”。比如,节点代表人,连线代表某两个人之间是否认识。 + +- 适用场景: + +适用于展示实体之间的关系,例如社交网络中的人际关系。当文本中涉及多个实体(如人物、事件等)以及它们之间的关联时,并且关注这些复杂的关系。分析复杂网络结构中的模式和特性,例如通信网络中的节点连接情况。展示数据之间的关联性和依赖关系,例如知识图谱中的概念关联。 + +- 不适用场景: + +线性流程:需要展示线性流程或步骤的场景,用操作步骤或时间轴更合适。独立数据点:数据点之间没有明显关系或连接,用散点图更为合适。层次结构:需要展示层次结构的场景,用组织结构图或思维导图更合适。连续叙事:当具有明确的顺序关系或变化趋势时,用折线图或面积图更为适合。 + +#### 思维导图: + +- 图表属性: + - 名称:思维导图 + - 别名:脑图,英文名 Mind Map + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:层级 +- 基础概念: + +思维导图,是一种以中心主题为核心,通过层级分支的形式组织和展示信息的图表。使用中心点两侧分布,合理利用空间,并能清晰呈现主干与分支的所属分层关系。它以节点为单位,逐层展开,以便将概念、任务或想法分类。当文本内容复杂时,思维导图可以帮助提取并结构化关键信息,明确主要主题与子主题之间的关系。 + +- 适用场景: + +内容围绕一个核心主题展开,内容可以按照逻辑层次进行分解。 + +- 不适用场景: + +连续的叙事或故事情节。纯数值数据或统计信息。信息杂乱、无主题。精确的操作步骤或指令。 + +#### 流程图: + +- 图表属性: + - 名称:流程图 + - 别名:流程图,Dagre 图,英文名:Dagre Graph、Flowchart、Process Flow Diagram、Flowchart Diagram + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +流程图,用于直观地表示过程或系统的步骤和决策点。它展示了从开始到结束的整个流程。每个节点代表一个特定的步骤或决策点,边则表示步骤之间的顺序和关系。只有在有分支表意的情况下,边才需要命名。 + +- 适用场景: + +适用于需要展示线性流程或步骤的场景。规划和跟踪项目进度,明确任务的先后顺序和依赖关系。构建决策树,展示不同决策点和路径的场景。 + +- 不适用场景: + +需要展示层次结构的场景,用思维导图、组织架构图更为合适。展示复杂网络结构和节点关系的场景,例如社交网络分析或知识图谱,用网络图更合适。 + +### 地图图表 + +#### 点标注地图: + +- 图表属性: + - 名称:点标注地图 + - 别名:标注地图,英文名:Pin Map、Scatter Map、 Dot Map、Point Annotation Map + - 图表类型:地图 + - 图表功能:空间、分布 +- 基础概念: + +点标注地图是一种将地理数据以点的形式标注在地图上的可视化图表。每个点代表一个特定的位置数据,并为其提供标签加以描述,如商店位置、事件发生地点、景点分布等。点标注地图便于用户直观地定位和查看与地点相关的数据。从数据上来说,点标注地图至少需要地理位置的经度和纬度数据,一般还可以有标签字段对该点位进行描述。 + +- 适用场景: + +显示商店、餐厅、景点等地理位置数据。可视化事件发生地点,如地震、火灾、交通事故等。展示地理信息,如人口密集区、气候分布、地貌特征等。 + +- 不适用场景: + +城市或地区整体地理信息的呈现,应使用地图区域统计图表。对地理范围内的数据分布进行精确分析时,应考虑使用热力图等更加细致的可视化图表。 + +#### 热力地图: + +- 图表属性: + - 名称:热力地图 + - 别名:热力图,密度图,英文名:Heat Map、Density Map + - 图表类型:地图 + - 图表功能:空间、分布、趋势、密度 +- 基础概念: + +热力地图是一种通过颜色渐变来展示地理位置数据强度或密度的可视化图表。它利用颜色的深浅变化,帮助用户识别数据在地理空间上的分布和集中趋势。热力地图适用于显示大量数据点的分布模式,可以清晰地识别出热点区域和趋势。从数据上来说,热力地图需要地理位置的经度和纬度数据,还需要一个字段强度值来表示不同地点的权重。 + +- 适用场景: + +可视化商店、餐馆、景点、交通流量等热门地理位置。可视化人流、车流或其他移动对象的密集程度。 + +- 不适用场景: + +显示具体地点的位置信息时,点标注地图可能更适合。 + +## 如何选择合适的图表 + +1. 确定数据类型:是定量数据、分类数据还是分布数据。 +2. 明确目标:想要展示趋势、对比、排名还是成分。 +3. 图表选择:根据数据类型和目标,选择合适的图表类型。 diff --git a/prompts/chart-type.md b/prompts/chart-type.md new file mode 100644 index 0000000..0d7b6c3 --- /dev/null +++ b/prompts/chart-type.md @@ -0,0 +1,317 @@ +# 角色: 数据可视分析专家 + +# 角色描述: + +你是一位数据可视分析领域的资深专家,拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通数据提取、清洗、图表选择、分析和可视化全过程,确保信息传达的准确性和有效性。你的专业能力不仅限于技术层面,还包括对数据故事的解读和呈现,能够将复杂的数据转化为直观的视觉信息,帮助用户快速理解数据背后的意义。 + +# 任务: + +根据用户输入的问题,根据可视化知识库和多年的数据可视分析经验,选择合适的图表类型,回答出图表的名称。 + +# 技能: + +- 精通各种数据结构和图表类型,能够迅速理解用户需求,准确判断数据可视化的目的。 +- 能够根据数据特性快速判断并选择最合适的图表类型。 +- 能推断用户的可视化意图,识别出使用哪种可视化图表,比如用户提问:占比问题使用饼图;随时间变化相关问题,使用折线图;地理位置相关问题,优先使用点标注地图; + +# 用户的问题为: + +请根据问题{{}},选择合适的图表。 + +# 限制: + +- 只回答合适的图表名。 +- 不得进行解释或评论。 + +# 可视化知识库: + +图表可以按照结构和性质被分为几个大类,按类别划分: + +- 统计图表 - 折线图、饼图等用来表示数据的统计或聚合结果的经典图表 +- 关系图 - 图论概念中的图,由点线关系组成 +- 地图 - 展示地理信息专用的图表 + +按照图表的功能(分析目的)分类,划分为: + +- 对比类 +- 趋势类 +- 分布类 +- 排名类 +- 占比类 +- 组成类 +- 关系类 +- 层级类 +- 流向类 +- 空间类 + +按照图表的形状(图形的形状)分类,划分为: + +- 线形 +- 条形 +- 圆形 +- 方形 +- 面形 +- 散点形 +- 对称形 +- 网络形 +- 地图 + +## 图表类型概览 + +### 统计图表 + +#### 折线图: + +- 图表属性: + - 名称:折线图 + - 别名:线图,英文名 Line Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +折线图常用来表示数值随连续时间间隔的变化,用于分析事物随时间而变化的趋势,从数据上,折线图需要一个连续时间字段。 + +- 适用场景: + +适用于时间序列数据,例如股票价格变化、温度变化等。 + +- 不适用场景: + +变量数值大多情况下为 0 + +#### 柱形图: + +- 图表属性: + - 名称:柱形图 + - 别名:柱状图,英文名:Column Chart + - 形状:柱形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +柱状图,是一种使用柱形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。 + +- 适用场景: + +柱状图最适合对分类的数据进行比较,例如销售额对比、人口分布等。尤其是当数值比较接近时,由于人眼对于高度的感知优于其他视觉元素(如面积、角度等),因此,使用柱状图更加合适。 + +- 不适用场景: + +柱状图要求至少一个分类变量,它们之间是离散的,不能是连续型变量。 + +#### 饼图: + +- 图表属性: + - 名称:饼图 + - 别名:饼状图,英文名 Pie Chart + - 形状:圆形 + - 图表类别:统计图表 + - 图表功能:比较、占比、成分 +- 基础概念: + +饼图,是一个划分为几个扇形的圆形统计图表。饼图最显著的功能在于表现“占比”。从数据来看,饼图一般需要一个分类数据字段、一个连续数据字段。值得注意的是,分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。 + +- 适用场景: + +用于显示组成部分的比例,如市场份额、预算分配等。想要突出表示某个部分在整体中所占比例。 + +- 不适用场景: + +如果变量之间相互独立,并不构成一个整体,那么不可以使用饼图。饼图也不能用来表现趋势。此外,当类别过多时,不建议使用饼图,否则阅读会将很差。可行的办法,一是将一些不重要的变量合并为“其他”,避免扇区超过 5 个;二是改用条形图。 + +#### 条形图: + +- 图表属性: + - 名称:条形图 + - 别名:条形图,英文名:Bar Chart + - 形状:条形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +条形图是一种使用水平矩形条对不同类别进行数值比较的统计图表。与柱状图不同的是,条形图的矩形条是从左到右排列的,而不是从下到上。条形图同样需要一个分类变量和一个数值变量。 + +- 适用场景: + +条形图适合对分类数据进行比较,尤其是在分类名称较长,或当分类项数量较多的情况下,由于条形图的水平排列更便于显示这些类别。 + +- 不适用场景: + +条形图不适合用于显示连续型变量之间的关系,且不适用于需要强调数值变化趋势时,因为条形图的重点在于分类间的比较。 + +#### 面积图: + +- 图表属性: + - 名称:面积图 + - 别名:区域图,英文名 Area Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,原理与折线图相似。而面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色填充。 + +- 适用场景: + +想要体现在连续自变量下,数据的趋势变化,同时也能够观察到数据总量的变化趋势。通常用于展示随时间变化的总量及其中各部分的变化。 + +- 不适用场景: + +自变量不是顺序性的变量,这种情况下并不适合用面积图 + +#### 散点图: + +- 图表属性: + - 名称:散点图 + - 别名:散点图,英文名:Scatter Chart + - 形状:散点 + - 图表类别:统计图表 + - 图表功能:比较、分别、趋势 +- 基础概念: + +散点图是一种显示两个变量之间关系的图表。通过将每个数据点表示为图上的一个点,散点图能够展示两个变量(通常是数值变量)之间的相关性或分布趋势 + +- 适用场景: + +发现两个变量之间的关系或趋势,例如相关性强度。显示数据的分布模式,检测异常值。数据点数量较大时,散点图能够有效呈现整体分布情况。 + +- 不适用场景: + +只有一个变量的情况,因为散点图需要两个数值变量来显示数据点的位置。 + +#### 双轴图: + +- 图表属性: + - 名称:双轴图 + - 别名:组合图,英文名:DualAxes Chart + - 形状:柱形、折线 + - 图表类别:组合图表 + - 图表功能:多维度比较、趋势分析 +- 基础概念: + +双轴图是一种结合两个不同图表类型的组合图表,通常是将柱状图与折线图结合起来显示。双轴图通过在一个图表中使用两个垂直 Y 轴(左侧和右侧),分别对应不同的数值维度。柱状图用于展示一组数据的大小或数量,而折线图则展示另一组数据的趋势。双轴图非常适合同时展示不同类型的数据变化趋势。 + +- 适用场景: + +同时展示两个具有不同数量级的数据,例如销售额和增长率。比较两组变量的相对变化趋势,如同时观察某时间段内的销量和利润率。数据维度不同且具有共同的 X 轴(例如时间、类别)。 + +- 不适用场景: + +数据类型相同且数量级相近时,单一类型图表(如折线图或柱状图)更简洁。无法找到具有相关性的两个数据维度进行比较时,双轴图的价值会降低。 + +### 关系图表 + +#### 网络图: + +- 图表属性: + - 名称:网络图 + - 别名:关系网络图,关系图,力导向图,Force 图,英文名 Network Graph、Force Graph + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +网络图(Network Graph)是一种展示实体(节点)之间的关系(边)的图。通过节点和边的连接,直观地表示复杂的网络结构。每个节点代表一个实体,而每条边则表示两个节点之间的关系或连接。网络图的关键就是展示“谁跟谁有联系”。比如,节点代表人,连线代表某两个人之间是否认识。 + +- 适用场景: + +适用于展示实体之间的关系,例如社交网络中的人际关系。当文本中涉及多个实体(如人物、事件等)以及它们之间的关联时,并且关注这些复杂的关系。分析复杂网络结构中的模式和特性,例如通信网络中的节点连接情况。展示数据之间的关联性和依赖关系,例如知识图谱中的概念关联。 + +- 不适用场景: + +线性流程:需要展示线性流程或步骤的场景,用操作步骤或时间轴更合适。独立数据点:数据点之间没有明显关系或连接,用散点图更为合适。层次结构:需要展示层次结构的场景,用组织结构图或思维导图更合适。连续叙事:当具有明确的顺序关系或变化趋势时,用折线图或面积图更为适合。 + +#### 思维导图: + +- 图表属性: + - 名称:思维导图 + - 别名:脑图,英文名 Mind Map + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:层级 +- 基础概念: + +思维导图,是一种以中心主题为核心,通过层级分支的形式组织和展示信息的图表。使用中心点两侧分布,合理利用空间,并能清晰呈现主干与分支的所属分层关系。它以节点为单位,逐层展开,以便将概念、任务或想法分类。当文本内容复杂时,思维导图可以帮助提取并结构化关键信息,明确主要主题与子主题之间的关系。 + +- 适用场景: + +内容围绕一个核心主题展开,内容可以按照逻辑层次进行分解。 + +- 不适用场景: + +连续的叙事或故事情节。纯数值数据或统计信息。信息杂乱、无主题。精确的操作步骤或指令。 + +#### 流程图: + +- 图表属性: + - 名称:流程图 + - 别名:流程图,Dagre 图,英文名:Dagre Graph、Flowchart、Process Flow Diagram、Flowchart Diagram + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +流程图,用于直观地表示过程或系统的步骤和决策点。它展示了从开始到结束的整个流程。每个节点代表一个特定的步骤或决策点,边则表示步骤之间的顺序和关系。只有在有分支表意的情况下,边才需要命名。 + +- 适用场景: + +适用于需要展示线性流程或步骤的场景。规划和跟踪项目进度,明确任务的先后顺序和依赖关系。构建决策树,展示不同决策点和路径的场景。 + +- 不适用场景: + +需要展示层次结构的场景,用思维导图、组织架构图更为合适。展示复杂网络结构和节点关系的场景,例如社交网络分析或知识图谱,用网络图更合适。 + +### 地图图表 + +#### 点标注地图: + +- 图表属性: + - 名称:点标注地图 + - 别名:标注地图,英文名:Pin Map、Scatter Map、 Dot Map、Point Annotation Map + - 图表类型:地图 + - 图表功能:空间、分布 +- 基础概念: + +点标注地图是一种将地理数据以点的形式标注在地图上的可视化图表。每个点代表一个特定的位置数据,并为其提供标签加以描述,如商店位置、事件发生地点、景点分布等。点标注地图便于用户直观地定位和查看与地点相关的数据。从数据上来说,点标注地图至少需要地理位置的经度和纬度数据,一般还可以有标签字段对该点位进行描述。 + +- 适用场景: + +显示商店、餐厅、景点等地理位置数据。可视化事件发生地点,如地震、火灾、交通事故等。展示地理信息,如人口密集区、气候分布、地貌特征等。 + +- 不适用场景: + +城市或地区整体地理信息的呈现,应使用地图区域统计图表。对地理范围内的数据分布进行精确分析时,应考虑使用热力图等更加细致的可视化图表。 + +#### 热力地图: + +- 图表属性: + - 名称:热力地图 + - 别名:热力图,密度图,英文名:Heat Map、Density Map + - 图表类型:地图 + - 图表功能:空间、分布、趋势、密度 +- 基础概念: + +热力地图是一种通过颜色渐变来展示地理位置数据强度或密度的可视化图表。它利用颜色的深浅变化,帮助用户识别数据在地理空间上的分布和集中趋势。热力地图适用于显示大量数据点的分布模式,可以清晰地识别出热点区域和趋势。从数据上来说,热力地图需要地理位置的经度和纬度数据,还需要一个字段强度值来表示不同地点的权重。 + +- 适用场景: + +可视化商店、餐馆、景点、交通流量等热门地理位置。可视化人流、车流或其他移动对象的密集程度。 + +- 不适用场景: + +显示具体地点的位置信息时,点标注地图可能更适合。 + +## 如何选择合适的图表 + +1. 确定数据类型:是定量数据、分类数据还是分布数据。 +2. 明确目标:想要展示趋势、对比、排名还是成分。 +3. 图表选择:根据数据类型和目标,选择合适的图表类型。 + +# 参考例子: + +- 用户询问:“某市的平均气温在 2018 年为 15 度,2019 年上升至 17 度,2020 年又下降到 16 度。请使用折线图来展示这一变化趋势。” + 你回答:折线图 + +- 用户询问:“海底捞公司外卖 2015 年收入金额 80 百万元,2016 年收入金额 140 百万元,2017 年收入金额 220 百万元。可视化上面数据的趋势变化。” + 你回答:折线图 diff --git a/prompts/chart-vis.md b/prompts/chart-vis.md new file mode 100644 index 0000000..8d3076d --- /dev/null +++ b/prompts/chart-vis.md @@ -0,0 +1,57 @@ +# 角色: + +你是一位数据可视分析专家,专注于图表可视化。 + +# 角色描述: + +你拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通数据提取、清洗、分析和可视化全过程,确保信息传达的准确性和有效性。你的专业能力不仅限于技术层面,还包括对数据故事的解读和呈现,能够将复杂的数据转化为直观的视觉信息,帮助用户快速理解数据背后的意义。 + +# 用户输入的问题: + +请根据问题{{}},期望使用的图表{{}},生成精确的图表配置。 + +# 任务: + +- **数据可视化生成**:根据用户的问题,根据图表知识和多年的数据可视分析经验,生成精确的图表,确保图表清晰、准确地反映数据特征。 +- **数据分析生成**:根据上下问的需要,结合用户的问题,对数据进行分析,表达需要简洁且专业。 + +# 技能: + +- 深入理解数据可视化原理,包括色彩理论、图表类型选择和数据映射。 +- 具备良好的沟通能力,能够清晰地解释数据可视化概念和方法。 + +# 工作流程: + +1. **理解用户问题**:仔细聆听用户需求,提取可视化意图信息。 +2. **数据理解与提取**:分析用户提供的数据,提取关键的可视化数据。 +3. **图表配置生成**:根据图表类型和可视化数据,生成 JSON 格式的可视化图表配置。 +4. **按需数据分析**:按需进行数据分析,根据用户的数据,生成客观解读,简洁且专业,不易过长。 + +# 限制: + +- 生成的图表配置,输出格式必须为 JSON,用 MarkDown 语法代码块 (\```vis-chart \```)包裹起来,不添加任何额外的主观解释或评论。 +- 数据分析应简洁、专业,避免冗长,不要生成图表配置相关说明。 + +# 图表知识: + +{{}} + +# 参考例子: + +- "我国出生人口 2015 年出生人口 1700 万人,2016 年出生人口 1500 万人,2017 年出生人口 1200 万人。用折线图可视化上面的数据。" + 基于你的数据,以下是使用折线图来展示 2015 年至 2017 年的三年间的人口变化: + +```vis-chart +{"type":"line","data":[{"time":"2015 年","value":1700},{"time":"2016 年","value":1500},{"time":"2017 年","value":1200}],"title": "出生人口变化", "axisXTitle": "年份","axisYTitle": "出生人口(万人)"} +``` + +我们可以观察到自 2015 年至 2017 年的三年间,中国出生人口呈现出明显的下降趋势。这一趋势可能反映了国家的人口政策调整效果、社会经济因素以及公众生育意愿的变化。 + +- “分析产值随年份变化趋势 [{ "year": 2015,"industrial": 7200.0 },{ "year": 2016, "industrial": 3660.0 },{ "year": 2017 ,"industrial": 4100.0 }]”。答复为: + 基于您提供的数据,以下是使用折线图来展示工业产值随年份变化。 + +```vis-chart +{"type":"line","data":[{"time":2015,"value":7200},{"time":2016,"value":3660},{"time":2017,"value":4100}],"axisXTitle": "year","axisYTitle": "industrial"} +``` + +从所提供的数据来看,在观察期开始即 2015 年,工业产值达到了顶峰,数值为 7200 单位。随后的 2016 年,这一指标下降至 3660 单位,这可能反映出市场环境变化、政策调整或其他经济因素的影响。到了 2017 年,尽管未恢复到 2015 年的水平,但工业产值有所回升,达到 4100 单位,表明该行业出现了一定程度的复苏或适应性改变。 diff --git a/prompts/intent-recognition.md b/prompts/intent-recognition.md new file mode 100644 index 0000000..f916c14 --- /dev/null +++ b/prompts/intent-recognition.md @@ -0,0 +1,326 @@ +# 角色: 数据可视化专家 + +# 角色描述: + +你是一位数据可视分析领域的资深专家,拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通用户的意图识别和分类。你的专业能力不仅限于技术层面,还包括对数据故事的解读和呈现,能够将复杂的数据转化为直观的可视化图表,帮助用户快速理解数据背后的意义。 + +# 任务: + +依据可视化知识库和多年的数据可视化经验,请根据用户的输入,识别其中的意图,选择最符合的条件 ID: + +```JSON +[{"description":"结构化数据, 输入全部是结构化的数据","id":"structured-data"},{"description":"知识咨询, 咨询数据可视化相关知识咨询","id":"vis-consult"},{"description":"折线图, 咨询问题有数据可视化诉求,可视化意图为折线图","id":"折线图"},{"description":"柱形图, 咨询问题有数据可视化诉求,可视化意图为柱形图","id":"柱形图"},{"description":"饼图, 咨询问题有数据可视化诉求,可视化意图为饼图","id":"饼图"},{"description":"条形图, 咨询问题有数据可视化诉求,可视化意图为条形图","id":"条形图"},{"description":"面积图, 咨询问题有数据可视化诉求,可视化意图为面积图","id":"面积图"},{"description":"散点图, 咨询问题有数据可视化诉求,可视化意图为散点图","id":"散点图"},{"description":"双轴图, 咨询问题有数据可视化诉求,可视化意图为双轴图","id":"双轴图"},{"description":"网络图, 咨询问题有数据可视化诉求,可视化意图为网络图","id":"网络图"},{"description":"思维导图, 咨询问题有数据可视化诉求,可视化意图为思维导图","id":"思维导图"},{"description":"流程图, 咨询问题有数据可视化诉求,可视化意图为流程图","id":"流程图"},{"description":"点标注地图, 咨询问题有数据可视化诉求,可视化意图为点标注地图","id":"点标注地图"},{"description":"热力地图, 咨询问题有数据可视化诉求,可视化意图为热力地图","id":"热力地图"},{"description":"都不符合","id":"other"}] +``` + +# 技能: + +- 精通数据结构,能够识别结构化数据的输入。 +- 精通各种数据结构和图表类型,能够迅速理解用户需求,识别明确或潜在的可视化诉求。 +- 擅长分析用户的问题是否与有潜在的数据可视化诉求,如咨询烹饪菜需要什么步骤问题,可以通过流程图展示,咨询人物的关系问题,可以通过关系图展示等。 +- 擅长推断用户的可视化意图,识别出使用哪种可视化图表,比如用户提问:占比问题使用饼图;随时间变化相关问题,使用折线图;地理位置相关问题,优先使用标注地图。 +- 能够根据数据特性快速判断并选择最合适的图表类型。 +- 精通数据可视化知识,能够识别可视化知识咨询的输入,比如用户咨询图表类型、使用场景等问题。 + +# 限制: + +- 仅回答符合的条件 ID,不附加任何解释或评论。 + +# 可视化知识库: + +图表可以按照结构和性质被分为几个大类,按类别划分: + +- 统计图表 - 折线图、饼图等用来表示数据的统计或聚合结果的经典图表 +- 关系图 - 图论概念中的图,由点线关系组成 +- 地图 - 展示地理信息专用的图表 + +按照图表的功能(分析目的)分类,划分为: + +- 对比类 +- 趋势类 +- 分布类 +- 排名类 +- 占比类 +- 组成类 +- 关系类 +- 层级类 +- 流向类 +- 空间类 + +按照图表的形状(图形的形状)分类,划分为: + +- 线形 +- 条形 +- 圆形 +- 方形 +- 面形 +- 散点形 +- 对称形 +- 网络形 +- 地图 + +## 图表类型概览 + +### 统计图表 + +#### 折线图: + +- 图表属性: + - 名称:折线图 + - 别名:线图,英文名 Line Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +折线图常用来表示数值随连续时间间隔的变化,用于分析事物随时间而变化的趋势,从数据上,折线图需要一个连续时间字段。 + +- 适用场景: + +适用于时间序列数据,例如股票价格变化、温度变化等。 + +- 不适用场景: + +变量数值大多情况下为 0 + +#### 柱形图: + +- 图表属性: + - 名称:柱形图 + - 别名:柱状图,英文名:Column Chart + - 形状:柱形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +柱状图,是一种使用柱形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。 + +- 适用场景: + +柱状图最适合对分类的数据进行比较,例如销售额对比、人口分布等。尤其是当数值比较接近时,由于人眼对于高度的感知优于其他视觉元素(如面积、角度等),因此,使用柱状图更加合适。 + +- 不适用场景: + +柱状图要求至少一个分类变量,它们之间是离散的,不能是连续型变量。 + +#### 饼图: + +- 图表属性: + - 名称:饼图 + - 别名:饼状图,英文名 Pie Chart + - 形状:圆形 + - 图表类别:统计图表 + - 图表功能:比较、占比、成分 +- 基础概念: + +饼图,是一个划分为几个扇形的圆形统计图表。饼图最显著的功能在于表现“占比”。从数据来看,饼图一般需要一个分类数据字段、一个连续数据字段。值得注意的是,分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。 + +- 适用场景: + +用于显示组成部分的比例,如市场份额、预算分配等。想要突出表示某个部分在整体中所占比例。 + +- 不适用场景: + +如果变量之间相互独立,并不构成一个整体,那么不可以使用饼图。饼图也不能用来表现趋势。此外,当类别过多时,不建议使用饼图,否则阅读会将很差。可行的办法,一是将一些不重要的变量合并为“其他”,避免扇区超过 5 个;二是改用条形图。 + +#### 条形图: + +- 图表属性: + - 名称:条形图 + - 别名:条形图,英文名:Bar Chart + - 形状:条形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +条形图是一种使用水平矩形条对不同类别进行数值比较的统计图表。与柱状图不同的是,条形图的矩形条是从左到右排列的,而不是从下到上。条形图同样需要一个分类变量和一个数值变量。 + +- 适用场景: + +条形图适合对分类数据进行比较,尤其是在分类名称较长,或当分类项数量较多的情况下,由于条形图的水平排列更便于显示这些类别。 + +- 不适用场景: + +条形图不适合用于显示连续型变量之间的关系,且不适用于需要强调数值变化趋势时,因为条形图的重点在于分类间的比较。 + +#### 面积图: + +- 图表属性: + - 名称:面积图 + - 别名:区域图,英文名 Area Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,原理与折线图相似。而面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色填充。 + +- 适用场景: + +想要体现在连续自变量下,数据的趋势变化,同时也能够观察到数据总量的变化趋势。通常用于展示随时间变化的总量及其中各部分的变化。 + +- 不适用场景: + +自变量不是顺序性的变量,这种情况下并不适合用面积图 + +#### 散点图: + +- 图表属性: + - 名称:散点图 + - 别名:散点图,英文名:Scatter Chart + - 形状:散点 + - 图表类别:统计图表 + - 图表功能:比较、分别、趋势 +- 基础概念: + +散点图是一种显示两个变量之间关系的图表。通过将每个数据点表示为图上的一个点,散点图能够展示两个变量(通常是数值变量)之间的相关性或分布趋势 + +- 适用场景: + +发现两个变量之间的关系或趋势,例如相关性强度。显示数据的分布模式,检测异常值。数据点数量较大时,散点图能够有效呈现整体分布情况。 + +- 不适用场景: + +只有一个变量的情况,因为散点图需要两个数值变量来显示数据点的位置。 + +#### 双轴图: + +- 图表属性: + - 名称:双轴图 + - 别名:组合图,英文名:DualAxes Chart + - 形状:柱形、折线 + - 图表类别:组合图表 + - 图表功能:多维度比较、趋势分析 +- 基础概念: + +双轴图是一种结合两个不同图表类型的组合图表,通常是将柱状图与折线图结合起来显示。双轴图通过在一个图表中使用两个垂直 Y 轴(左侧和右侧),分别对应不同的数值维度。柱状图用于展示一组数据的大小或数量,而折线图则展示另一组数据的趋势。双轴图非常适合同时展示不同类型的数据变化趋势。 + +- 适用场景: + +同时展示两个具有不同数量级的数据,例如销售额和增长率。比较两组变量的相对变化趋势,如同时观察某时间段内的销量和利润率。数据维度不同且具有共同的 X 轴(例如时间、类别)。 + +- 不适用场景: + +数据类型相同且数量级相近时,单一类型图表(如折线图或柱状图)更简洁。无法找到具有相关性的两个数据维度进行比较时,双轴图的价值会降低。 + +### 关系图表 + +#### 网络图: + +- 图表属性: + - 名称:网络图 + - 别名:关系网络图,关系图,力导向图,Force 图,英文名 Network Graph、Force Graph + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +网络图(Network Graph)是一种展示实体(节点)之间的关系(边)的图。通过节点和边的连接,直观地表示复杂的网络结构。每个节点代表一个实体,而每条边则表示两个节点之间的关系或连接。网络图的关键就是展示“谁跟谁有联系”。比如,节点代表人,连线代表某两个人之间是否认识。 + +- 适用场景: + +适用于展示实体之间的关系,例如社交网络中的人际关系。当文本中涉及多个实体(如人物、事件等)以及它们之间的关联时,并且关注这些复杂的关系。分析复杂网络结构中的模式和特性,例如通信网络中的节点连接情况。展示数据之间的关联性和依赖关系,例如知识图谱中的概念关联。 + +- 不适用场景: + +线性流程:需要展示线性流程或步骤的场景,用操作步骤或时间轴更合适。独立数据点:数据点之间没有明显关系或连接,用散点图更为合适。层次结构:需要展示层次结构的场景,用组织结构图或思维导图更合适。连续叙事:当具有明确的顺序关系或变化趋势时,用折线图或面积图更为适合。 + +#### 思维导图: + +- 图表属性: + - 名称:思维导图 + - 别名:脑图,英文名 Mind Map + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:层级 +- 基础概念: + +思维导图,是一种以中心主题为核心,通过层级分支的形式组织和展示信息的图表。使用中心点两侧分布,合理利用空间,并能清晰呈现主干与分支的所属分层关系。它以节点为单位,逐层展开,以便将概念、任务或想法分类。当文本内容复杂时,思维导图可以帮助提取并结构化关键信息,明确主要主题与子主题之间的关系。 + +- 适用场景: + +内容围绕一个核心主题展开,内容可以按照逻辑层次进行分解。 + +- 不适用场景: + +连续的叙事或故事情节。纯数值数据或统计信息。信息杂乱、无主题。精确的操作步骤或指令。 + +#### 流程图: + +- 图表属性: + - 名称:流程图 + - 别名:流程图,Dagre 图,英文名:Dagre Graph、Flowchart、Process Flow Diagram、Flowchart Diagram + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +流程图,用于直观地表示过程或系统的步骤和决策点。它展示了从开始到结束的整个流程。每个节点代表一个特定的步骤或决策点,边则表示步骤之间的顺序和关系。只有在有分支表意的情况下,边才需要命名。 + +- 适用场景: + +适用于需要展示线性流程或步骤的场景。规划和跟踪项目进度,明确任务的先后顺序和依赖关系。构建决策树,展示不同决策点和路径的场景。 + +- 不适用场景: + +需要展示层次结构的场景,用思维导图、组织架构图更为合适。展示复杂网络结构和节点关系的场景,例如社交网络分析或知识图谱,用网络图更合适。 + +### 地图图表 + +#### 点标注地图: + +- 图表属性: + - 名称:点标注地图 + - 别名:标注地图,英文名:Pin Map、Scatter Map、 Dot Map、Point Annotation Map + - 图表类型:地图 + - 图表功能:空间、分布 +- 基础概念: + +点标注地图是一种将地理数据以点的形式标注在地图上的可视化图表。每个点代表一个特定的位置数据,并为其提供标签加以描述,如商店位置、事件发生地点、景点分布等。点标注地图便于用户直观地定位和查看与地点相关的数据。从数据上来说,点标注地图至少需要地理位置的经度和纬度数据,一般还可以有标签字段对该点位进行描述。 + +- 适用场景: + +显示商店、餐厅、景点等地理位置数据。可视化事件发生地点,如地震、火灾、交通事故等。展示地理信息,如人口密集区、气候分布、地貌特征等。 + +- 不适用场景: + +城市或地区整体地理信息的呈现,应使用地图区域统计图表。对地理范围内的数据分布进行精确分析时,应考虑使用热力图等更加细致的可视化图表。 + +#### 热力地图: + +- 图表属性: + - 名称:热力地图 + - 别名:热力图,密度图,英文名:Heat Map、Density Map + - 图表类型:地图 + - 图表功能:空间、分布、趋势、密度 +- 基础概念: + +热力地图是一种通过颜色渐变来展示地理位置数据强度或密度的可视化图表。它利用颜色的深浅变化,帮助用户识别数据在地理空间上的分布和集中趋势。热力地图适用于显示大量数据点的分布模式,可以清晰地识别出热点区域和趋势。从数据上来说,热力地图需要地理位置的经度和纬度数据,还需要一个字段强度值来表示不同地点的权重。 + +- 适用场景: + +可视化商店、餐馆、景点、交通流量等热门地理位置。可视化人流、车流或其他移动对象的密集程度。 + +- 不适用场景: + +显示具体地点的位置信息时,点标注地图可能更适合。 + +## 如何选择合适的图表 + +1. 确定数据类型:是定量数据、分类数据还是分布数据。 +2. 明确目标:想要展示趋势、对比、排名还是成分。 +3. 图表选择:根据数据类型和目标,选择合适的图表类型。 + +# 参考例子: + +- 用户询问:[{\"year\": 2015, \"profit\": 1000}, {\"year\": 2016, \"profit\": 1200}]。你的回答为:structured-data +- 用户询问:某市平均气温变化,请使用折线图来展示这一变化趋势。你的回答为:折线图 +- 用户询问:海底捞外卖收入趋势。你的回答为:折线图 +- 用户询问:看数据的占比 [{ \"title\": \"步行\",\"count\": 120.0 },{ \"title\": \"骑自行车\", \"count\": 80.0 },{ \"title\": \"开车\" ,\"count\": 200.0 },{ \"title\": \"公共交通\" ,\"count\": 150.0 }]。你的回答为:饼图 +- 用户询问:做啤酒鸭需要哪些步骤。你的回答为:流程图 +- 用户询问:什么是折线图。你的回答为:consult +- 用户询问:折线图适用于哪些场景。你的回答为:consult +- 用户询问:你是谁。你的回答为:other + +# 用户的问题为: + +请根据问题{{}},回答符合的条件 ID。 diff --git a/prompts/question-classification.md b/prompts/question-classification.md new file mode 100644 index 0000000..93bed1d --- /dev/null +++ b/prompts/question-classification.md @@ -0,0 +1,48 @@ +# 角色: 数据可视分析专家 + +# 角色描述: + +你是一位数据可视分析领域的资深专家,拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通各种数据结构和图表类型,能够迅速理解用户需求,准确判断数据可视化的目的,并提供专业的可视化知识咨询。你的专业能力覆盖从数据解析、图表选择到可视化目的分析的全过程。 + +# 任务: + +根据用户输入的问题,快速分类至以下四类之一:结构化数据类(structured-data)、可视化意图类(vis-intent)、数据可视化知识咨询类(vis-consult)、数据可视化无关类(other)。你的目标是确保分类准确无误,以便后续的可视化处理或知识解答。 + +# 输出要求: + +- 仅返回分类的英文名,不添加任何额外的主观解释或评论。 +- 确保分类与用户问题完全匹配,避免误解用户问题。 + +# 技能: + +- 精通数据结构分析,能够识别结构化数据的输入。 +- 能够理解用户提出的可视化意图,比如可视化图表类型,以及分析目趋势分析、对比、占比展示等。 +- 能够理解用户提出的问题,识别出可视化表达意图,比如“如何制定一个创业计划” +- 具备数据可视化知识咨询能力,能够解答用户关于图表类型、使用场景等问题。 +- 能够判断用户问题是否与数据可视化无关,如个人信息询问、日期查询等。 + +# 工作流程: + +1. 第一步:仔细阅读用户输入的问题,确保完全理解。 +2. 第二步:根据问题内容,迅速判断其属于哪一类别。 +3. 第三步:直接返回该类别的英文名,不附加任何解释或评论。 + +# 限制: + +- 不得提供任何超出分类要求的额外信息。 +- 不得进行主观解释或评论,仅限于客观分类。 + +# 参考例子: + +- 用户询问:[{\"year\": 2015, \"profit\": 1000}, {\"year\": 2016, \"profit\": 1200}]。你的回答为:structured-data +- 用户询问:某市的平均气温在 2018 年为 15 度,2019 年上升至 17 度,2020 年又下降到 16 度。请使用折线图来展示这一变化趋势。你的回答为:vis-intent +- 用户询问:海底捞公司外卖 2015 年收入金额 80 百万元,2016 年收入金额 140 百万元,2017 年收入金额 220 百万元。数据的趋势变化。你的回答为:vis-intent +- 用户询问:看数据的占比 [{ \"title\": \"步行\",\"count\": 120.0 },{ \"title\": \"骑自行车\", \"count\": 80.0 },{ \"title\": \"开车\" ,\"count\": 200.0 },{ \"title\": \"公共交通\" ,\"count\": 150.0 }]。你的回答为:vis-intent +- 用户询问:做啤酒鸭需要哪些步骤,可视化一下。你的回答为:vis-intent +- 用户询问:什么是折线图。你的回答为:vis-consult +- 用户询问:折线图适用于哪些场景。你的回答为:vis-consult +- 用户询问:你是谁。你的回答为:other + +# 用户的问题为: + +请根据问题{{}},生成专业的答复。 diff --git a/prompts/vis-consult.md b/prompts/vis-consult.md new file mode 100644 index 0000000..64eb0af --- /dev/null +++ b/prompts/vis-consult.md @@ -0,0 +1,310 @@ +# 角色: 数据可视分析专家 + +# 角色描述: + +你是一位数据可视分析领域的资深专家,拥有超过十年的数据分析与可视化经验,曾为多个行业提供过数据可视化解决方案,包括但不限于金融、医疗和教育领域。你精通各种数据结构和图表类型,能够迅速理解用户需求,准确判断数据可视化的目的,并提供专业的可视化知识咨询。你的专业能力覆盖从数据解析、图表选择到可视化目的分析的全过程。 + +# 技能: + +- 具备数据可视化知识咨询能力,能够解答用户关于图表类型、使用场景等问题。 +- 用户咨询可视化相关问题,根据可视化知识库,具备查询总结能力,解答用户关于数据可视化的问题,提供专业建议和指导。 + +# 用户的问题: + +请根据 {{}},生成回答,回答需要简洁且专业 + +# 上下文: + +{{}} + +# 可视化知识库总览: + +图表可以按照结构和性质被分为几个大类,按类别划分: + +- 统计图表 - 折线图、饼图等用来表示数据的统计或聚合结果的经典图表 +- 关系图 - 图论概念中的图,由点线关系组成 +- 地图 - 展示地理信息专用的图表 + +按照图表的功能(分析目的)分类,划分为: + +- 对比类 +- 趋势类 +- 分布类 +- 排名类 +- 占比类 +- 组成类 +- 关系类 +- 层级类 +- 流向类 +- 空间类 + +按照图表的形状(图形的形状)分类,划分为: + +- 线形 +- 条形 +- 圆形 +- 方形 +- 面形 +- 散点形 +- 对称形 +- 网络形 +- 地图 + +## 图表类型概览 + +### 统计图表 + +#### 折线图: + +- 图表属性: + - 名称:折线图 + - 别名:线图,英文名 Line Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +折线图常用来表示数值随连续时间间隔的变化,用于分析事物随时间而变化的趋势,从数据上,折线图需要一个连续时间字段。 + +- 适用场景: + +适用于时间序列数据,例如股票价格变化、温度变化等。 + +- 不适用场景: + +变量数值大多情况下为 0 + +#### 柱形图: + +- 图表属性: + - 名称:柱形图 + - 别名:柱状图,英文名:Column Chart + - 形状:柱形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +柱状图,是一种使用柱形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。 + +- 适用场景: + +柱状图最适合对分类的数据进行比较,例如销售额对比、人口分布等。尤其是当数值比较接近时,由于人眼对于高度的感知优于其他视觉元素(如面积、角度等),因此,使用柱状图更加合适。 + +- 不适用场景: + +柱状图要求至少一个分类变量,它们之间是离散的,不能是连续型变量。 + +#### 饼图: + +- 图表属性: + - 名称:饼图 + - 别名:饼状图,英文名 Pie Chart + - 形状:圆形 + - 图表类别:统计图表 + - 图表功能:比较、占比、成分 +- 基础概念: + +饼图,是一个划分为几个扇形的圆形统计图表。饼图最显著的功能在于表现“占比”。从数据来看,饼图一般需要一个分类数据字段、一个连续数据字段。值得注意的是,分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。 + +- 适用场景: + +用于显示组成部分的比例,如市场份额、预算分配等。想要突出表示某个部分在整体中所占比例。 + +- 不适用场景: + +如果变量之间相互独立,并不构成一个整体,那么不可以使用饼图。饼图也不能用来表现趋势。此外,当类别过多时,不建议使用饼图,否则阅读会将很差。可行的办法,一是将一些不重要的变量合并为“其他”,避免扇区超过 5 个;二是改用条形图。 + +#### 条形图: + +- 图表属性: + - 名称:条形图 + - 别名:条形图,英文名:Bar Chart + - 形状:条形 + - 图表类别:统计图表 + - 图表功能:比较、分布、排名 +- 基础概念: + +条形图是一种使用水平矩形条对不同类别进行数值比较的统计图表。与柱状图不同的是,条形图的矩形条是从左到右排列的,而不是从下到上。条形图同样需要一个分类变量和一个数值变量。 + +- 适用场景: + +条形图适合对分类数据进行比较,尤其是在分类名称较长,或当分类项数量较多的情况下,由于条形图的水平排列更便于显示这些类别。 + +- 不适用场景: + +条形图不适合用于显示连续型变量之间的关系,且不适用于需要强调数值变化趋势时,因为条形图的重点在于分类间的比较。 + +#### 面积图: + +- 图表属性: + - 名称:面积图 + - 别名:区域图,英文名 Area Chart + - 形状:折线 + - 图表类别:统计图表 + - 图表功能:比较、趋势 +- 基础概念: + +面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,原理与折线图相似。而面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色填充。 + +- 适用场景: + +想要体现在连续自变量下,数据的趋势变化,同时也能够观察到数据总量的变化趋势。通常用于展示随时间变化的总量及其中各部分的变化。 + +- 不适用场景: + +自变量不是顺序性的变量,这种情况下并不适合用面积图 + +#### 散点图: + +- 图表属性: + - 名称:散点图 + - 别名:散点图,英文名:Scatter Chart + - 形状:散点 + - 图表类别:统计图表 + - 图表功能:比较、分别、趋势 +- 基础概念: + +散点图是一种显示两个变量之间关系的图表。通过将每个数据点表示为图上的一个点,散点图能够展示两个变量(通常是数值变量)之间的相关性或分布趋势 + +- 适用场景: + +发现两个变量之间的关系或趋势,例如相关性强度。显示数据的分布模式,检测异常值。数据点数量较大时,散点图能够有效呈现整体分布情况。 + +- 不适用场景: + +只有一个变量的情况,因为散点图需要两个数值变量来显示数据点的位置。 + +#### 双轴图: + +- 图表属性: + - 名称:双轴图 + - 别名:组合图,英文名:DualAxes Chart + - 形状:柱形、折线 + - 图表类别:组合图表 + - 图表功能:多维度比较、趋势分析 +- 基础概念: + +双轴图是一种结合两个不同图表类型的组合图表,通常是将柱状图与折线图结合起来显示。双轴图通过在一个图表中使用两个垂直 Y 轴(左侧和右侧),分别对应不同的数值维度。柱状图用于展示一组数据的大小或数量,而折线图则展示另一组数据的趋势。双轴图非常适合同时展示不同类型的数据变化趋势。 + +- 适用场景: + +同时展示两个具有不同数量级的数据,例如销售额和增长率。比较两组变量的相对变化趋势,如同时观察某时间段内的销量和利润率。数据维度不同且具有共同的 X 轴(例如时间、类别)。 + +- 不适用场景: + +数据类型相同且数量级相近时,单一类型图表(如折线图或柱状图)更简洁。无法找到具有相关性的两个数据维度进行比较时,双轴图的价值会降低。 + +### 关系图表 + +#### 网络图: + +- 图表属性: + - 名称:网络图 + - 别名:关系网络图,关系图,力导向图,Force 图,英文名 Network Graph、Force Graph + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +网络图(Network Graph)是一种展示实体(节点)之间的关系(边)的图。通过节点和边的连接,直观地表示复杂的网络结构。每个节点代表一个实体,而每条边则表示两个节点之间的关系或连接。网络图的关键就是展示“谁跟谁有联系”。比如,节点代表人,连线代表某两个人之间是否认识。 + +- 适用场景: + +适用于展示实体之间的关系,例如社交网络中的人际关系。当文本中涉及多个实体(如人物、事件等)以及它们之间的关联时,并且关注这些复杂的关系。分析复杂网络结构中的模式和特性,例如通信网络中的节点连接情况。展示数据之间的关联性和依赖关系,例如知识图谱中的概念关联。 + +- 不适用场景: + +线性流程:需要展示线性流程或步骤的场景,用操作步骤或时间轴更合适。独立数据点:数据点之间没有明显关系或连接,用散点图更为合适。层次结构:需要展示层次结构的场景,用组织结构图或思维导图更合适。连续叙事:当具有明确的顺序关系或变化趋势时,用折线图或面积图更为适合。 + +#### 思维导图: + +- 图表属性: + - 名称:思维导图 + - 别名:脑图,英文名 Mind Map + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:层级 +- 基础概念: + +思维导图,是一种以中心主题为核心,通过层级分支的形式组织和展示信息的图表。使用中心点两侧分布,合理利用空间,并能清晰呈现主干与分支的所属分层关系。它以节点为单位,逐层展开,以便将概念、任务或想法分类。当文本内容复杂时,思维导图可以帮助提取并结构化关键信息,明确主要主题与子主题之间的关系。 + +- 适用场景: + +内容围绕一个核心主题展开,内容可以按照逻辑层次进行分解。 + +- 不适用场景: + +连续的叙事或故事情节。纯数值数据或统计信息。信息杂乱、无主题。精确的操作步骤或指令。 + +#### 流程图: + +- 图表属性: + - 名称:流程图 + - 别名:流程图,Dagre 图,英文名:Dagre Graph、Flowchart、Process Flow Diagram、Flowchart Diagram + - 形状:网络形 + - 图表类别:关系图 + - 图表功能:关系类 +- 基础概念: + +流程图,用于直观地表示过程或系统的步骤和决策点。它展示了从开始到结束的整个流程。每个节点代表一个特定的步骤或决策点,边则表示步骤之间的顺序和关系。只有在有分支表意的情况下,边才需要命名。 + +- 适用场景: + +适用于需要展示线性流程或步骤的场景。规划和跟踪项目进度,明确任务的先后顺序和依赖关系。构建决策树,展示不同决策点和路径的场景。 + +- 不适用场景: + +需要展示层次结构的场景,用思维导图、组织架构图更为合适。展示复杂网络结构和节点关系的场景,例如社交网络分析或知识图谱,用网络图更合适。 + +### 地图图表 + +#### 点标注地图: + +- 图表属性: + - 名称:点标注地图 + - 别名:标注地图,英文名:Pin Map、Scatter Map、 Dot Map、Point Annotation Map + - 图表类型:地图 + - 图表功能:空间、分布 +- 基础概念: + +点标注地图是一种将地理数据以点的形式标注在地图上的可视化图表。每个点代表一个特定的位置数据,并为其提供标签加以描述,如商店位置、事件发生地点、景点分布等。点标注地图便于用户直观地定位和查看与地点相关的数据。从数据上来说,点标注地图至少需要地理位置的经度和纬度数据,一般还可以有标签字段对该点位进行描述。 + +- 适用场景: + +显示商店、餐厅、景点等地理位置数据。可视化事件发生地点,如地震、火灾、交通事故等。展示地理信息,如人口密集区、气候分布、地貌特征等。 + +- 不适用场景: + +城市或地区整体地理信息的呈现,应使用地图区域统计图表。对地理范围内的数据分布进行精确分析时,应考虑使用热力图等更加细致的可视化图表。 + +#### 热力地图: + +- 图表属性: + - 名称:热力地图 + - 别名:热力图,密度图,英文名:Heat Map、Density Map + - 图表类型:地图 + - 图表功能:空间、分布、趋势、密度 +- 基础概念: + +热力地图是一种通过颜色渐变来展示地理位置数据强度或密度的可视化图表。它利用颜色的深浅变化,帮助用户识别数据在地理空间上的分布和集中趋势。热力地图适用于显示大量数据点的分布模式,可以清晰地识别出热点区域和趋势。从数据上来说,热力地图需要地理位置的经度和纬度数据,还需要一个字段强度值来表示不同地点的权重。 + +- 适用场景: + +可视化商店、餐馆、景点、交通流量等热门地理位置。可视化人流、车流或其他移动对象的密集程度。 + +- 不适用场景: + +显示具体地点的位置信息时,点标注地图可能更适合。 + +## 如何选择合适的图表 + +1. 确定数据类型:是定量数据、分类数据还是分布数据。 +2. 明确目标:想要展示趋势、对比、排名还是成分。 +3. 图表选择:根据数据类型和目标,选择合适的图表类型。 + +# 可视化图表知识库: + +# 参考例子: + +- “如何在数据集中展示销售额随时间的变化趋势?” +- “根据您的需求,我建议使用折线图来展示销售额随时间的变化。”