'commit'
This commit is contained in:
735
Log/1.log
735
Log/1.log
@@ -1,419 +1,316 @@
|
|||||||
C:\Users\Administrator\.conda\envs\yunnan\python.exe D:\dsWork\YunNanProject\Tools\Full_Original.py
|
{
|
||||||
开始执行全部数据处理工具 (T1-T8)
|
"animation": true,
|
||||||
当前工作目录: D:\dsWork\YunNanProject\Tools
|
"animationThreshold": 2000,
|
||||||
切换到工具目录: D:\dsWork\YunNanProject\Tools
|
"animationDuration": 1000,
|
||||||
|
"animationEasing": "cubicOut",
|
||||||
==================================================
|
"animationDelay": 0,
|
||||||
开始执行 T1_RenKou
|
"animationDurationUpdate": 300,
|
||||||
==================================================
|
"animationEasingUpdate": "cubicOut",
|
||||||
开始时间: 2025-09-10 14:23:24
|
"animationDelayUpdate": 0,
|
||||||
|
"aria": {
|
||||||
=== 名称转换记录 ===
|
"enabled": false
|
||||||
🔄 行 14: 石林县 → 石林彝族自治县
|
},
|
||||||
🔄 行 16: 禄劝县 → 禄劝彝族苗族自治县
|
"color": [
|
||||||
🔄 行 17: 寻甸县 → 寻甸回族彝族自治县
|
"#5470c6",
|
||||||
🔄 行 32: 澄江县 → 澄江市
|
"#91cc75",
|
||||||
🔄 行 36: 峨山县 → 峨山彝族自治县
|
"#fac858",
|
||||||
🔄 行 37: 新平县 → 新平彝族傣族自治县
|
"#ee6666",
|
||||||
🔄 行 38: 元江县 → 元江哈尼族彝族傣族自治县
|
"#73c0de",
|
||||||
🔄 行 59: 玉龙县 → 玉龙纳西族自治县
|
"#3ba272",
|
||||||
🔄 行 62: 宁蒗县 → 宁蒗彝族自治县
|
"#fc8452",
|
||||||
🔄 行 65: 宁洱县 → 宁洱哈尼族彝族自治县
|
"#9a60b4",
|
||||||
🔄 行 66: 墨江县 → 墨江哈尼族自治县
|
"#ea7ccc"
|
||||||
🔄 行 67: 景东县 → 景东彝族自治县
|
],
|
||||||
🔄 行 68: 景谷县 → 景谷傣族彝族自治县
|
"series": [
|
||||||
🔄 行 69: 镇沅县 → 镇沅彝族哈尼族拉祜族自治县
|
{
|
||||||
🔄 行 70: 江城县 → 江城哈尼族彝族自治县
|
"type": "bar",
|
||||||
🔄 行 71: 孟连县 → 孟连傣族拉祜族佤族自治县
|
"name": "总人口",
|
||||||
🔄 行 72: 澜沧县 → 澜沧拉祜族自治县
|
"legendHoverLink": true,
|
||||||
🔄 行 73: 西盟县 → 西盟佤族自治县
|
"data": [],
|
||||||
🔄 行 80: 双江县 → 双江拉祜族佤族布朗族傣族自治县
|
"realtimeSort": false,
|
||||||
🔄 行 81: 耿马县 → 耿马傣族佤族自治县
|
"showBackground": false,
|
||||||
🔄 行 82: 沧源县 → 沧源佤族自治县
|
"stack": "stack1",
|
||||||
🔄 行 83: 楚雄州 → 楚雄彝族自治州
|
"stackStrategy": "samesign",
|
||||||
🔄 行 85: 禄丰市 → 禄丰县
|
"cursor": "pointer",
|
||||||
🔄 行 94: 红河州 → 红河哈尼族彝族自治州
|
"barMinHeight": 0,
|
||||||
🔄 行 99: 屏边县 → 屏边苗族自治县
|
"barCategoryGap": "20%",
|
||||||
🔄 行 105: 金平县 → 金平苗族瑶族傣族自治县
|
"barGap": "30%",
|
||||||
🔄 行 107: 河口县 → 河口瑶族自治县
|
"large": false,
|
||||||
🔄 行 108: 文山州 → 文山壮族苗族自治州
|
"largeThreshold": 400,
|
||||||
🔄 行 117: 西双版纳州 → 西双版纳傣族自治州
|
"seriesLayoutBy": "column",
|
||||||
🔄 行 121: 大理州 → 大理白族自治州
|
"datasetIndex": 0,
|
||||||
🔄 行 123: 漾濞县 → 漾濞彝族自治县
|
"clip": true,
|
||||||
🔄 行 127: 南涧县 → 南涧彝族自治县
|
"zlevel": 0,
|
||||||
🔄 行 128: 巍山县 → 巍山彝族回族自治县
|
"z": 2,
|
||||||
🔄 行 134: 德宏州 → 德宏傣族景颇族自治州
|
"label": {
|
||||||
🔄 行 140: 怒江州 → 怒江傈僳族自治州
|
"show": false,
|
||||||
🔄 行 143: 贡山县 → 贡山独龙族怒族自治县
|
"margin": 8,
|
||||||
🔄 行 144: 兰坪县 → 兰坪白族普米族自治县
|
"valueAnimation": false
|
||||||
🔄 行 145: 迪庆州 → 迪庆藏族自治州
|
},
|
||||||
🔄 行 148: 维西县 → 维西傈僳族自治县
|
"markLine": {
|
||||||
📊 共检测到 39 项名称转换
|
"silent": false,
|
||||||
✅ 所有区域名称均成功转换为全称
|
"precision": 2,
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\RenKou.json
|
"label": {
|
||||||
📊 共处理 146 条地区数据
|
"show": true,
|
||||||
|
"margin": 8,
|
||||||
✅ T1_RenKou 执行成功
|
"valueAnimation": false
|
||||||
结束时间: 2025-09-10 14:23:26
|
},
|
||||||
耗时: 2.31 秒
|
"data": [
|
||||||
|
{
|
||||||
==================================================
|
"name": "平均值",
|
||||||
开始执行 T2_MaoRuXueLv
|
"type": "average"
|
||||||
==================================================
|
}
|
||||||
开始时间: 2025-09-10 14:23:26
|
]
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\MaoRuXueLv.json
|
},
|
||||||
📊 共处理 146 条地区数据
|
"rippleEffect": {
|
||||||
|
"show": true,
|
||||||
=== 名称转换记录 ===
|
"brushType": "stroke",
|
||||||
🔄 行 13: 晋宁县 → 晋宁区
|
"scale": 2.5,
|
||||||
🔄 行 23: 马龙县 → 马龙区
|
"period": 4
|
||||||
🔄 行 29: 沾益县 → 沾益区
|
}
|
||||||
🔄 行 33: 江川县 → 江川区
|
},
|
||||||
🔄 行 34: 澄江县 → 澄江市
|
{
|
||||||
🔄 行 44: 腾冲县 → 腾冲市
|
"type": "bar",
|
||||||
🔄 行 58: 水富县 → 水富市
|
"name": "城镇人口",
|
||||||
🔄 行 143: 泸水县 → 泸水市
|
"legendHoverLink": true,
|
||||||
🔄 行 148: 香格里拉县 → 香格里拉市
|
"data": [],
|
||||||
📊 共检测到 9 项名称转换
|
"realtimeSort": false,
|
||||||
✅ 所有区域名称均成功转换为全称
|
"showBackground": false,
|
||||||
|
"stack": "stack1",
|
||||||
✅ T2_MaoRuXueLv 执行成功
|
"stackStrategy": "samesign",
|
||||||
结束时间: 2025-09-10 14:23:26
|
"cursor": "pointer",
|
||||||
耗时: 0.15 秒
|
"barMinHeight": 0,
|
||||||
|
"barCategoryGap": "20%",
|
||||||
==================================================
|
"barGap": "30%",
|
||||||
开始执行 T3_SchoolCount
|
"large": false,
|
||||||
==================================================
|
"largeThreshold": 400,
|
||||||
开始时间: 2025-09-10 14:23:26
|
"seriesLayoutBy": "column",
|
||||||
✅ 学校数数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\SchoolCount.json
|
"datasetIndex": 0,
|
||||||
📊 共处理 146 条地区数据
|
"clip": true,
|
||||||
|
"zlevel": 0,
|
||||||
=== 名称转换记录 ===
|
"z": 2,
|
||||||
🔄 行 12: 晋宁县 → 晋宁区
|
"label": {
|
||||||
🔄 行 22: 马龙县 → 马龙区
|
"show": false,
|
||||||
🔄 行 28: 沾益县 → 沾益区
|
"margin": 8,
|
||||||
🔄 行 32: 江川县 → 江川区
|
"valueAnimation": false
|
||||||
🔄 行 33: 澄江县 → 澄江市
|
},
|
||||||
🔄 行 43: 腾冲县 → 腾冲市
|
"markLine": {
|
||||||
🔄 行 57: 水富县 → 水富市
|
"silent": false,
|
||||||
🔄 行 142: 泸水县 → 泸水市
|
"precision": 2,
|
||||||
🔄 行 147: 香格里拉县 → 香格里拉市
|
"label": {
|
||||||
📊 共检测到 9 项名称转换
|
"show": true,
|
||||||
|
"margin": 8,
|
||||||
❌ T3_SchoolCount 没有找到main函数
|
"valueAnimation": false
|
||||||
|
},
|
||||||
⚠️ T3_SchoolCount 执行失败,但继续执行后续工具...
|
"data": [
|
||||||
|
{
|
||||||
==================================================
|
"name": "平均值",
|
||||||
开始执行 T4_ClassCount
|
"type": "average"
|
||||||
==================================================
|
}
|
||||||
开始时间: 2025-09-10 14:23:27
|
]
|
||||||
|
},
|
||||||
=== 名称转换记录 ===
|
"rippleEffect": {
|
||||||
🔄 行 12: 晋宁县 → 晋宁区
|
"show": true,
|
||||||
🔄 行 22: 马龙县 → 马龙区
|
"brushType": "stroke",
|
||||||
🔄 行 28: 沾益县 → 沾益区
|
"scale": 2.5,
|
||||||
🔄 行 32: 江川县 → 江川区
|
"period": 4
|
||||||
🔄 行 33: 澄江县 → 澄江市
|
}
|
||||||
🔄 行 43: 腾冲县 → 腾冲市
|
},
|
||||||
🔄 行 57: 水富县 → 水富市
|
{
|
||||||
🔄 行 142: 泸水县 → 泸水市
|
"type": "bar",
|
||||||
🔄 行 147: 香格里拉县 → 香格里拉市
|
"name": "农村人口",
|
||||||
📊 共检测到 9 项名称转换
|
"legendHoverLink": true,
|
||||||
✅ 所有区域名称均成功转换为全称
|
"data": [],
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\ClassCount.json
|
"realtimeSort": false,
|
||||||
📊 共处理 146 条地区数据
|
"showBackground": false,
|
||||||
|
"stack": "stack1",
|
||||||
✅ T4_ClassCount 执行成功
|
"stackStrategy": "samesign",
|
||||||
结束时间: 2025-09-10 14:23:27
|
"cursor": "pointer",
|
||||||
耗时: 0.24 秒
|
"barMinHeight": 0,
|
||||||
|
"barCategoryGap": "20%",
|
||||||
==================================================
|
"barGap": "30%",
|
||||||
开始执行 T5_ZhaoShengCount
|
"large": false,
|
||||||
==================================================
|
"largeThreshold": 400,
|
||||||
开始时间: 2025-09-10 14:23:27
|
"seriesLayoutBy": "column",
|
||||||
✅ 成功加载Excel文件:D:\dsWork\YunNanProject\Doc\数据库-2015-2024-v2.xlsx
|
"datasetIndex": 0,
|
||||||
✅ 开始处理招生数数据,共149行数据
|
"clip": true,
|
||||||
🔄 已处理 10 条数据...
|
"zlevel": 0,
|
||||||
🔄 已处理 20 条数据...
|
"z": 2,
|
||||||
🔄 已处理 30 条数据...
|
"label": {
|
||||||
🔄 已处理 40 条数据...
|
"show": false,
|
||||||
🔄 已处理 50 条数据...
|
"margin": 8,
|
||||||
🔄 已处理 60 条数据...
|
"valueAnimation": false
|
||||||
🔄 已处理 70 条数据...
|
},
|
||||||
🔄 已处理 80 条数据...
|
"markLine": {
|
||||||
🔄 已处理 90 条数据...
|
"silent": false,
|
||||||
🔄 已处理 100 条数据...
|
"precision": 2,
|
||||||
🔄 已处理 110 条数据...
|
"label": {
|
||||||
🔄 已处理 120 条数据...
|
"show": true,
|
||||||
🔄 已处理 130 条数据...
|
"margin": 8,
|
||||||
🔄 已处理 140 条数据...
|
"valueAnimation": false
|
||||||
|
},
|
||||||
=== 名称转换记录 ===
|
"data": [
|
||||||
🔄 行 12: 晋宁县 → 晋宁区
|
{
|
||||||
🔄 行 22: 马龙县 → 马龙区
|
"name": "平均值",
|
||||||
🔄 行 28: 沾益县 → 沾益区
|
"type": "average"
|
||||||
🔄 行 32: 江川县 → 江川区
|
}
|
||||||
🔄 行 33: 澄江县 → 澄江市
|
]
|
||||||
🔄 行 43: 腾冲县 → 腾冲市
|
},
|
||||||
🔄 行 57: 水富县 → 水富市
|
"rippleEffect": {
|
||||||
🔄 行 142: 泸水县 → 泸水市
|
"show": true,
|
||||||
🔄 行 147: 香格里拉县 → 香格里拉市
|
"brushType": "stroke",
|
||||||
📊 共检测到 9 项名称转换
|
"scale": 2.5,
|
||||||
✅ 所有区域名称均成功转换为全称
|
"period": 4
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\ZhaoShengCount.json
|
}
|
||||||
📊 共处理 145 条地区数据
|
}
|
||||||
|
],
|
||||||
✅ T5_ZhaoShengCount 执行成功
|
"legend": [
|
||||||
结束时间: 2025-09-10 14:23:27
|
{
|
||||||
耗时: 0.26 秒
|
"data": [
|
||||||
|
"总人口",
|
||||||
==================================================
|
"城镇人口",
|
||||||
开始执行 T6_ZaiXiaoShengCount
|
"农村人口"
|
||||||
==================================================
|
],
|
||||||
开始时间: 2025-09-10 14:23:27
|
"selected": {},
|
||||||
✅ 开始处理在校生数数据,共149行数据
|
"show": true,
|
||||||
🔄 已处理10条数据...
|
"top": "5%",
|
||||||
🔄 已处理20条数据...
|
"padding": 5,
|
||||||
🔄 已处理30条数据...
|
"itemGap": 10,
|
||||||
🔄 已处理40条数据...
|
"itemWidth": 25,
|
||||||
🔄 已处理50条数据...
|
"itemHeight": 14,
|
||||||
🔄 已处理60条数据...
|
"backgroundColor": "transparent",
|
||||||
🔄 已处理70条数据...
|
"borderColor": "#ccc",
|
||||||
🔄 已处理80条数据...
|
"borderRadius": 0,
|
||||||
🔄 已处理90条数据...
|
"pageButtonItemGap": 5,
|
||||||
🔄 已处理100条数据...
|
"pageButtonPosition": "end",
|
||||||
🔄 已处理110条数据...
|
"pageFormatter": "{current}/{total}",
|
||||||
🔄 已处理120条数据...
|
"pageIconColor": "#2f4554",
|
||||||
🔄 已处理130条数据...
|
"pageIconInactiveColor": "#aaa",
|
||||||
🔄 已处理140条数据...
|
"pageIconSize": 15,
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\ZaiXiaoShengCount.json
|
"animationDurationUpdate": 800,
|
||||||
📊 共处理 145 条地区数据
|
"selector": false,
|
||||||
|
"selectorPosition": "auto",
|
||||||
=== 名称转换记录 ===
|
"selectorItemGap": 7,
|
||||||
🔄 行 5: 昆明市 → 昆明市
|
"selectorButtonGap": 10
|
||||||
🔄 行 6: 五华区 → 五华区
|
}
|
||||||
🔄 行 7: 盘龙区 → 盘龙区
|
],
|
||||||
🔄 行 8: 官渡区 → 官渡区
|
"tooltip": {
|
||||||
🔄 行 9: 西山区 → 西山区
|
"show": true,
|
||||||
🔄 行 10: 东川区 → 东川区
|
"trigger": "axis",
|
||||||
🔄 行 11: 呈贡区 → 呈贡区
|
"triggerOn": "mousemove|click",
|
||||||
🔄 行 12: 晋宁县 → 晋宁区
|
"axisPointer": {
|
||||||
🔄 行 12: 晋宁县 → 晋宁区
|
"type": "shadow"
|
||||||
🔄 行 13: 富民县 → 富民县
|
},
|
||||||
🔄 行 14: 宜良县 → 宜良县
|
"showContent": true,
|
||||||
🔄 行 15: 石林彝族自治县 → 石林彝族自治县
|
"alwaysShowContent": false,
|
||||||
🔄 行 16: 嵩明县 → 嵩明县
|
"showDelay": 0,
|
||||||
🔄 行 17: 禄劝彝族苗族自治县 → 禄劝彝族苗族自治县
|
"hideDelay": 100,
|
||||||
🔄 行 18: 寻甸回族彝族自治县 → 寻甸回族彝族自治县
|
"enterable": false,
|
||||||
🔄 行 19: 安宁市 → 安宁市
|
"confine": false,
|
||||||
🔄 行 20: 曲靖市 → 曲靖市
|
"appendToBody": false,
|
||||||
🔄 行 21: 麒麟区 → 麒麟区
|
"transitionDuration": 0.4,
|
||||||
🔄 行 22: 马龙县 → 马龙区
|
"textStyle": {
|
||||||
🔄 行 22: 马龙县 → 马龙区
|
"fontSize": 14
|
||||||
🔄 行 23: 陆良县 → 陆良县
|
},
|
||||||
🔄 行 24: 师宗县 → 师宗县
|
"borderWidth": 0,
|
||||||
🔄 行 25: 罗平县 → 罗平县
|
"padding": 5,
|
||||||
🔄 行 26: 富源县 → 富源县
|
"order": "seriesAsc"
|
||||||
🔄 行 27: 会泽县 → 会泽县
|
},
|
||||||
🔄 行 28: 沾益县 → 沾益区
|
"xAxis": [
|
||||||
🔄 行 28: 沾益县 → 沾益区
|
{
|
||||||
🔄 行 29: 宣威市 → 宣威市
|
"show": true,
|
||||||
🔄 行 30: 玉溪市 → 玉溪市
|
"scale": false,
|
||||||
🔄 行 31: 红塔区 → 红塔区
|
"nameLocation": "end",
|
||||||
🔄 行 32: 江川县 → 江川区
|
"nameGap": 15,
|
||||||
🔄 行 32: 江川县 → 江川区
|
"gridIndex": 0,
|
||||||
🔄 行 33: 澄江县 → 澄江市
|
"axisLabel": {
|
||||||
🔄 行 33: 澄江县 → 澄江市
|
"show": true,
|
||||||
🔄 行 34: 通海县 → 通海县
|
"rotate": 45,
|
||||||
🔄 行 35: 华宁县 → 华宁县
|
"margin": 8,
|
||||||
🔄 行 36: 易门县 → 易门县
|
"valueAnimation": false
|
||||||
🔄 行 37: 峨山彝族自治县 → 峨山彝族自治县
|
},
|
||||||
🔄 行 38: 新平彝族傣族自治县 → 新平彝族傣族自治县
|
"inverse": false,
|
||||||
🔄 行 39: 元江哈尼族彝族傣族自治县 → 元江哈尼族彝族傣族自治县
|
"offset": 0,
|
||||||
🔄 行 40: 保山市 → 保山市
|
"splitNumber": 5,
|
||||||
🔄 行 41: 隆阳区 → 隆阳区
|
"minInterval": 0,
|
||||||
🔄 行 42: 施甸县 → 施甸县
|
"splitLine": {
|
||||||
🔄 行 43: 腾冲县 → 腾冲市
|
"show": true,
|
||||||
🔄 行 43: 腾冲县 → 腾冲市
|
"lineStyle": {
|
||||||
🔄 行 44: 龙陵县 → 龙陵县
|
"show": true,
|
||||||
🔄 行 45: 昌宁县 → 昌宁县
|
"width": 1,
|
||||||
🔄 行 46: 昭通市 → 昭通市
|
"opacity": 1,
|
||||||
🔄 行 47: 昭阳区 → 昭阳区
|
"curveness": 0,
|
||||||
🔄 行 48: 鲁甸县 → 鲁甸县
|
"type": "solid"
|
||||||
🔄 行 49: 巧家县 → 巧家县
|
}
|
||||||
🔄 行 50: 盐津县 → 盐津县
|
},
|
||||||
🔄 行 51: 大关县 → 大关县
|
"animation": true,
|
||||||
🔄 行 52: 永善县 → 永善县
|
"animationThreshold": 2000,
|
||||||
🔄 行 53: 绥江县 → 绥江县
|
"animationDuration": 1000,
|
||||||
🔄 行 54: 镇雄县 → 镇雄县
|
"animationEasing": "cubicOut",
|
||||||
🔄 行 55: 彝良县 → 彝良县
|
"animationDelay": 0,
|
||||||
🔄 行 56: 威信县 → 威信县
|
"animationDurationUpdate": 300,
|
||||||
🔄 行 57: 水富县 → 水富市
|
"animationEasingUpdate": "cubicOut",
|
||||||
🔄 行 57: 水富县 → 水富市
|
"animationDelayUpdate": 0,
|
||||||
🔄 行 58: 丽江市 → 丽江市
|
"data": []
|
||||||
🔄 行 59: 古城区 → 古城区
|
}
|
||||||
🔄 行 60: 玉龙纳西族自治县 → 玉龙纳西族自治县
|
],
|
||||||
🔄 行 61: 永胜县 → 永胜县
|
"yAxis": [
|
||||||
🔄 行 62: 华坪县 → 华坪县
|
{
|
||||||
🔄 行 63: 宁蒗彝族自治县 → 宁蒗彝族自治县
|
"name": "人口数量(万人)",
|
||||||
🔄 行 64: 普洱市 → 普洱市
|
"show": true,
|
||||||
🔄 行 65: 思茅区 → 思茅区
|
"scale": false,
|
||||||
🔄 行 66: 宁洱哈尼族彝族自治县 → 宁洱哈尼族彝族自治县
|
"nameLocation": "middle",
|
||||||
🔄 行 67: 墨江哈尼族自治县 → 墨江哈尼族自治县
|
"nameGap": 40,
|
||||||
🔄 行 68: 景东彝族自治县 → 景东彝族自治县
|
"gridIndex": 0,
|
||||||
🔄 行 69: 景谷傣族彝族自治县 → 景谷傣族彝族自治县
|
"inverse": false,
|
||||||
🔄 行 70: 镇沅彝族哈尼族拉祜族自治县 → 镇沅彝族哈尼族拉祜族自治县
|
"offset": 0,
|
||||||
🔄 行 71: 江城哈尼族彝族自治县 → 江城哈尼族彝族自治县
|
"splitNumber": 5,
|
||||||
🔄 行 72: 孟连傣族拉祜族佤族自治县 → 孟连傣族拉祜族佤族自治县
|
"minInterval": 0,
|
||||||
🔄 行 73: 澜沧拉祜族自治县 → 澜沧拉祜族自治县
|
"splitLine": {
|
||||||
🔄 行 74: 西盟佤族自治县 → 西盟佤族自治县
|
"show": true,
|
||||||
🔄 行 75: 临沧市 → 临沧市
|
"lineStyle": {
|
||||||
🔄 行 76: 临翔区 → 临翔区
|
"show": true,
|
||||||
🔄 行 77: 凤庆县 → 凤庆县
|
"width": 1,
|
||||||
🔄 行 78: 云县 → 云县
|
"opacity": 1,
|
||||||
🔄 行 79: 永德县 → 永德县
|
"curveness": 0,
|
||||||
🔄 行 80: 镇康县 → 镇康县
|
"type": "solid"
|
||||||
🔄 行 81: 双江拉祜族佤族布朗族傣族自治县 → 双江拉祜族佤族布朗族傣族自治县
|
}
|
||||||
🔄 行 82: 耿马傣族佤族自治县 → 耿马傣族佤族自治县
|
},
|
||||||
🔄 行 83: 沧源佤族自治县 → 沧源佤族自治县
|
"animation": true,
|
||||||
🔄 行 84: 楚雄彝族自治州 → 楚雄彝族自治州
|
"animationThreshold": 2000,
|
||||||
🔄 行 85: 楚雄市 → 楚雄市
|
"animationDuration": 1000,
|
||||||
🔄 行 86: 双柏县 → 双柏县
|
"animationEasing": "cubicOut",
|
||||||
🔄 行 87: 牟定县 → 牟定县
|
"animationDelay": 0,
|
||||||
🔄 行 88: 南华县 → 南华县
|
"animationDurationUpdate": 300,
|
||||||
🔄 行 89: 姚安县 → 姚安县
|
"animationEasingUpdate": "cubicOut",
|
||||||
🔄 行 90: 大姚县 → 大姚县
|
"animationDelayUpdate": 0
|
||||||
🔄 行 91: 永仁县 → 永仁县
|
}
|
||||||
🔄 行 92: 元谋县 → 元谋县
|
],
|
||||||
🔄 行 93: 武定县 → 武定县
|
"title": [
|
||||||
🔄 行 94: 禄丰县 → 禄丰县
|
{
|
||||||
🔄 行 95: 红河哈尼族彝族自治州 → 红河哈尼族彝族自治州
|
"show": true,
|
||||||
🔄 行 96: 个旧市 → 个旧市
|
"text": "云南省各州市人口分布图(2024年)",
|
||||||
🔄 行 97: 开远市 → 开远市
|
"target": "blank",
|
||||||
🔄 行 98: 蒙自市 → 蒙自市
|
"subtarget": "blank",
|
||||||
🔄 行 99: 弥勒市 → 弥勒市
|
"padding": 5,
|
||||||
🔄 行 100: 屏边苗族自治县 → 屏边苗族自治县
|
"itemGap": 10,
|
||||||
🔄 行 101: 建水县 → 建水县
|
"textAlign": "auto",
|
||||||
🔄 行 102: 石屏县 → 石屏县
|
"textVerticalAlign": "auto",
|
||||||
🔄 行 103: 泸西县 → 泸西县
|
"triggerEvent": false
|
||||||
🔄 行 104: 元阳县 → 元阳县
|
}
|
||||||
🔄 行 105: 红河县 → 红河县
|
],
|
||||||
🔄 行 106: 金平苗族瑶族傣族自治县 → 金平苗族瑶族傣族自治县
|
"dataZoom": [
|
||||||
🔄 行 107: 绿春县 → 绿春县
|
{
|
||||||
🔄 行 108: 河口瑶族自治县 → 河口瑶族自治县
|
"show": true,
|
||||||
🔄 行 109: 文山壮族苗族自治州 → 文山壮族苗族自治州
|
"type": "slider",
|
||||||
🔄 行 110: 文山市 → 文山市
|
"showDetail": true,
|
||||||
🔄 行 111: 砚山县 → 砚山县
|
"showDataShadow": true,
|
||||||
🔄 行 112: 西畴县 → 西畴县
|
"realtime": true,
|
||||||
🔄 行 113: 麻栗坡县 → 麻栗坡县
|
"start": 20,
|
||||||
🔄 行 114: 马关县 → 马关县
|
"end": 80,
|
||||||
🔄 行 115: 丘北县 → 丘北县
|
"orient": "horizontal",
|
||||||
🔄 行 116: 广南县 → 广南县
|
"zoomLock": false,
|
||||||
🔄 行 117: 富宁县 → 富宁县
|
"filterMode": "filter"
|
||||||
🔄 行 118: 西双版纳傣族自治州 → 西双版纳傣族自治州
|
}
|
||||||
🔄 行 119: 景洪市 → 景洪市
|
]
|
||||||
🔄 行 120: 勐海县 → 勐海县
|
}
|
||||||
🔄 行 121: 勐腊县 → 勐腊县
|
|
||||||
🔄 行 122: 大理白族自治州 → 大理白族自治州
|
|
||||||
🔄 行 123: 大理市 → 大理市
|
|
||||||
🔄 行 124: 漾濞彝族自治县 → 漾濞彝族自治县
|
|
||||||
🔄 行 125: 祥云县 → 祥云县
|
|
||||||
🔄 行 126: 宾川县 → 宾川县
|
|
||||||
🔄 行 127: 弥渡县 → 弥渡县
|
|
||||||
🔄 行 128: 南涧彝族自治县 → 南涧彝族自治县
|
|
||||||
🔄 行 129: 巍山彝族回族自治县 → 巍山彝族回族自治县
|
|
||||||
🔄 行 130: 永平县 → 永平县
|
|
||||||
🔄 行 131: 云龙县 → 云龙县
|
|
||||||
🔄 行 132: 洱源县 → 洱源县
|
|
||||||
🔄 行 133: 剑川县 → 剑川县
|
|
||||||
🔄 行 134: 鹤庆县 → 鹤庆县
|
|
||||||
🔄 行 135: 德宏傣族景颇族自治州 → 德宏傣族景颇族自治州
|
|
||||||
🔄 行 136: 瑞丽市 → 瑞丽市
|
|
||||||
🔄 行 137: 芒市 → 芒市
|
|
||||||
🔄 行 138: 梁河县 → 梁河县
|
|
||||||
🔄 行 139: 盈江县 → 盈江县
|
|
||||||
🔄 行 140: 陇川县 → 陇川县
|
|
||||||
🔄 行 141: 怒江傈僳族自治州 → 怒江傈僳族自治州
|
|
||||||
🔄 行 142: 泸水县 → 泸水市
|
|
||||||
🔄 行 142: 泸水县 → 泸水市
|
|
||||||
🔄 行 143: 福贡县 → 福贡县
|
|
||||||
🔄 行 144: 贡山独龙族怒族自治县 → 贡山独龙族怒族自治县
|
|
||||||
🔄 行 145: 兰坪白族普米族自治县 → 兰坪白族普米族自治县
|
|
||||||
🔄 行 146: 迪庆藏族自治州 → 迪庆藏族自治州
|
|
||||||
🔄 行 147: 香格里拉县 → 香格里拉市
|
|
||||||
🔄 行 147: 香格里拉县 → 香格里拉市
|
|
||||||
🔄 行 148: 德钦县 → 德钦县
|
|
||||||
🔄 行 149: 维西傈僳族自治县 → 维西傈僳族自治县
|
|
||||||
📊 共检测到 154 项名称转换
|
|
||||||
✅ 所有区域名称均成功转换为全称
|
|
||||||
💾 数据已保存至 D:\dsWork\YunNanProject\Data\ZaiXiaoShengCount.json
|
|
||||||
|
|
||||||
✅ T6_ZaiXiaoShengCount 执行成功
|
|
||||||
结束时间: 2025-09-10 14:23:27
|
|
||||||
耗时: 0.25 秒
|
|
||||||
|
|
||||||
==================================================
|
|
||||||
开始执行 T7_TeacherCount
|
|
||||||
==================================================
|
|
||||||
开始时间: 2025-09-10 14:23:27
|
|
||||||
✅ 开始处理教师数据,共150行数据
|
|
||||||
✅ 数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\TeacherCount.json
|
|
||||||
📊 共处理 146 条地区数据
|
|
||||||
|
|
||||||
=== 名称转换记录 ===
|
|
||||||
🔄 行 13: 晋宁县 → 晋宁区
|
|
||||||
🔄 行 23: 马龙县 → 马龙区
|
|
||||||
🔄 行 29: 沾益县 → 沾益区
|
|
||||||
🔄 行 33: 江川县 → 江川区
|
|
||||||
🔄 行 34: 澄江县 → 澄江市
|
|
||||||
🔄 行 44: 腾冲县 → 腾冲市
|
|
||||||
🔄 行 58: 水富县 → 水富市
|
|
||||||
🔄 行 143: 泸水县 → 泸水市
|
|
||||||
🔄 行 148: 香格里拉县 → 香格里拉市
|
|
||||||
📊 共检测到 9 项名称转换
|
|
||||||
✅ 所有区域名称均成功转换为全称
|
|
||||||
|
|
||||||
✅ T7_TeacherCount 执行成功
|
|
||||||
结束时间: 2025-09-10 14:23:28
|
|
||||||
耗时: 0.39 秒
|
|
||||||
|
|
||||||
==================================================
|
|
||||||
开始执行 T8_SchoolMianJi
|
|
||||||
==================================================
|
|
||||||
开始时间: 2025-09-10 14:23:28
|
|
||||||
✅ 学校面积数据提取完成,已保存至:D:\dsWork\YunNanProject\Data\SchoolArea.json
|
|
||||||
📊 共处理 146 条地区数据
|
|
||||||
|
|
||||||
=== 名称转换记录 ===
|
|
||||||
🔄 行 13: 晋宁县 → 晋宁区
|
|
||||||
🔄 行 23: 马龙县 → 马龙区
|
|
||||||
🔄 行 29: 沾益县 → 沾益区
|
|
||||||
🔄 行 33: 江川县 → 江川区
|
|
||||||
🔄 行 34: 澄江县 → 澄江市
|
|
||||||
🔄 行 44: 腾冲县 → 腾冲市
|
|
||||||
🔄 行 58: 水富县 → 水富市
|
|
||||||
🔄 行 143: 泸水县 → 泸水市
|
|
||||||
🔄 行 148: 香格里拉县 → 香格里拉市
|
|
||||||
📊 共检测到 9 项名称转换
|
|
||||||
|
|
||||||
❌ T8_SchoolMianJi 没有找到main函数
|
|
||||||
|
|
||||||
⚠️ T8_SchoolMianJi 执行失败,但继续执行后续工具...
|
|
||||||
|
|
||||||
==================================================
|
|
||||||
执行结果摘要
|
|
||||||
==================================================
|
|
||||||
T1_RenKou: ✅ 成功
|
|
||||||
T2_MaoRuXueLv: ✅ 成功
|
|
||||||
T3_SchoolCount: ❌ 失败
|
|
||||||
T4_ClassCount: ✅ 成功
|
|
||||||
T5_ZhaoShengCount: ✅ 成功
|
|
||||||
T6_ZaiXiaoShengCount: ✅ 成功
|
|
||||||
T7_TeacherCount: ✅ 成功
|
|
||||||
T8_SchoolMianJi: ❌ 失败
|
|
||||||
|
|
||||||
总计: 6/8 个工具执行成功
|
|
||||||
⚠️ 部分工具执行失败,请检查错误信息
|
|
||||||
|
|
||||||
进程已结束,退出代码为 0
|
|
@@ -1,10 +1,11 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
import pyecharts
|
import pyecharts
|
||||||
from pyecharts import options as opts
|
from pyecharts import options as opts
|
||||||
from pyecharts.charts import Bar
|
from pyecharts.charts import Bar, Line
|
||||||
from pyecharts.faker import Faker
|
from pyecharts.faker import Faker
|
||||||
from pyecharts.globals import CurrentConfig
|
from pyecharts.globals import CurrentConfig
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
# 创建 APIRouter 实例
|
# 创建 APIRouter 实例
|
||||||
router = APIRouter(prefix="/bigscreen", tags=["大屏展示"])
|
router = APIRouter(prefix="/bigscreen", tags=["大屏展示"])
|
||||||
@@ -13,9 +14,9 @@ router = APIRouter(prefix="/bigscreen", tags=["大屏展示"])
|
|||||||
CurrentConfig.ONLINE_HOST = "https://gcore.jsdelivr.net/npm/echarts@6.0.0/dist/"
|
CurrentConfig.ONLINE_HOST = "https://gcore.jsdelivr.net/npm/echarts@6.0.0/dist/"
|
||||||
|
|
||||||
# 定义一个 helloWorld 路由
|
# 定义一个 helloWorld 路由
|
||||||
@router.get("/hello")
|
@router.get("/")
|
||||||
async def hello_world():
|
async def root():
|
||||||
return {"message": "helloWorld"}
|
return {"message": "Welcome to YunNan Education World!"}
|
||||||
|
|
||||||
# 生成图表配置的函数
|
# 生成图表配置的函数
|
||||||
def generate_bar_chart_config():
|
def generate_bar_chart_config():
|
||||||
@@ -50,23 +51,65 @@ async def get_bar_chart_config():
|
|||||||
chart_config = generate_bar_chart_config()
|
chart_config = generate_bar_chart_config()
|
||||||
return chart_config
|
return chart_config
|
||||||
|
|
||||||
# 定义一个带有参数的路由,可以自定义图表标题
|
# 读取人口数据
|
||||||
@router.get("/chart/bar/{title}")
|
def load_population_data():
|
||||||
async def get_custom_bar_chart_config(title: str):
|
try:
|
||||||
"""
|
# 获取当前文件所在目录的父目录,然后找到Data文件夹
|
||||||
获取自定义标题的柱状图配置
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
"""
|
project_root = os.path.dirname(current_dir)
|
||||||
|
data_path = os.path.join(project_root, "Data", "RenKou.json")
|
||||||
|
|
||||||
|
with open(data_path, "r", encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
return data
|
||||||
|
except Exception as e:
|
||||||
|
print(f"读取人口数据出错: {e}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
# 生成人口数据图表配置
|
||||||
|
def generate_population_chart_config(year="2024"):
|
||||||
|
# 加载人口数据
|
||||||
|
population_data = load_population_data()
|
||||||
|
|
||||||
|
# 筛选出州市级数据(排除县级数据)
|
||||||
|
# 正确的格式是 9 位数字,且以 000 结尾但不以 000000 结尾
|
||||||
|
cities = [item for item in population_data if len(item["area_code"]) == 9 and item["area_code"].endswith("000") and not item["area_code"].endswith("000000")]
|
||||||
|
|
||||||
|
# 提取城市名称和人口数据
|
||||||
|
city_names = [city["area_name"] for city in cities]
|
||||||
|
total_populations = [city["total_population"].get(year, 0) for city in cities]
|
||||||
|
urban_populations = [city["urban_population"].get(year, 0) for city in cities]
|
||||||
|
rural_populations = [city["rural_population"].get(year, 0) for city in cities]
|
||||||
|
|
||||||
|
# 创建柱状图
|
||||||
c = (
|
c = (
|
||||||
Bar()
|
Bar()
|
||||||
.add_xaxis(Faker.choose())
|
.add_xaxis(city_names)
|
||||||
.add_yaxis("商家A", Faker.values())
|
.add_yaxis("总人口", total_populations, stack="stack1")
|
||||||
.add_yaxis("商家B", Faker.values())
|
.add_yaxis("城镇人口", urban_populations, stack="stack1")
|
||||||
.set_global_opts(title_opts=opts.TitleOpts(title=title))
|
.add_yaxis("农村人口", rural_populations, stack="stack1")
|
||||||
|
.set_global_opts(
|
||||||
|
title_opts=opts.TitleOpts(title=f"云南省各州市人口分布图({year}年)"),
|
||||||
|
tooltip_opts=opts.TooltipOpts(
|
||||||
|
trigger="axis",
|
||||||
|
axis_pointer_type="shadow"
|
||||||
|
),
|
||||||
|
legend_opts=opts.LegendOpts(pos_top="5%"),
|
||||||
|
datazoom_opts=[opts.DataZoomOpts()],
|
||||||
|
xaxis_opts=opts.AxisOpts(
|
||||||
|
axislabel_opts=opts.LabelOpts(rotate=45)
|
||||||
|
),
|
||||||
|
yaxis_opts=opts.AxisOpts(
|
||||||
|
name="人口数量(万人)",
|
||||||
|
name_location="middle",
|
||||||
|
name_gap=40
|
||||||
|
)
|
||||||
|
)
|
||||||
.set_series_opts(
|
.set_series_opts(
|
||||||
label_opts=opts.LabelOpts(is_show=False),
|
label_opts=opts.LabelOpts(is_show=False),
|
||||||
markline_opts=opts.MarkLineOpts(
|
markline_opts=opts.MarkLineOpts(
|
||||||
data=[opts.MarkLineItem(y=50, name="yAxis=50")]
|
data=[opts.MarkLineItem(type_="average", name="平均值")]
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -77,3 +120,80 @@ async def get_custom_bar_chart_config(title: str):
|
|||||||
options_json = json.loads(options_str)
|
options_json = json.loads(options_str)
|
||||||
|
|
||||||
return options_json
|
return options_json
|
||||||
|
|
||||||
|
# 生成城镇化率图表配置
|
||||||
|
def generate_urbanization_rate_chart_config():
|
||||||
|
# 加载人口数据
|
||||||
|
population_data = load_population_data()
|
||||||
|
|
||||||
|
# 筛选出州市级数据(排除县级数据)
|
||||||
|
# 正确的格式是 9 位数字,且以 000 结尾但不以 000000 结尾
|
||||||
|
cities = [item for item in population_data if len(item["area_code"]) == 9 and item["area_code"].endswith("000") and not item["area_code"].endswith("000000")]
|
||||||
|
|
||||||
|
# 提取城市名称和城镇化率数据
|
||||||
|
city_names = [city["area_name"] for city in cities]
|
||||||
|
|
||||||
|
# 创建折线图
|
||||||
|
line = (
|
||||||
|
Line()
|
||||||
|
.add_xaxis(city_names)
|
||||||
|
)
|
||||||
|
|
||||||
|
# 添加各年份的城镇化率数据
|
||||||
|
years = ["2020", "2021", "2022", "2023", "2024"]
|
||||||
|
for year in years:
|
||||||
|
urbanization_rates = [city["urbanization_rate"].get(year, 0) for city in cities]
|
||||||
|
line.add_yaxis(f"{year}年", urbanization_rates,
|
||||||
|
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]))
|
||||||
|
|
||||||
|
line.set_global_opts(
|
||||||
|
title_opts=opts.TitleOpts(title="云南省各州市城镇化率变化趋势"),
|
||||||
|
tooltip_opts=opts.TooltipOpts(trigger="axis"),
|
||||||
|
legend_opts=opts.LegendOpts(pos_top="5%"),
|
||||||
|
datazoom_opts=[opts.DataZoomOpts()],
|
||||||
|
xaxis_opts=opts.AxisOpts(
|
||||||
|
axislabel_opts=opts.LabelOpts(rotate=45)
|
||||||
|
),
|
||||||
|
yaxis_opts=opts.AxisOpts(
|
||||||
|
name="城镇化率(%)",
|
||||||
|
name_location="middle",
|
||||||
|
name_gap=40,
|
||||||
|
min_=0,
|
||||||
|
max_=100
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# 获取图表的选项配置
|
||||||
|
options_str = line.dump_options_with_quotes()
|
||||||
|
|
||||||
|
# 将字符串转换为 JSON 对象
|
||||||
|
options_json = json.loads(options_str)
|
||||||
|
|
||||||
|
return options_json
|
||||||
|
|
||||||
|
# 定义一个返回人口数据图表配置的路由
|
||||||
|
@router.get("/population/chart/{year}")
|
||||||
|
async def get_population_chart_config(year: str = "2024"):
|
||||||
|
"""
|
||||||
|
获取人口数据图表配置
|
||||||
|
"""
|
||||||
|
chart_config = generate_population_chart_config(year)
|
||||||
|
return chart_config
|
||||||
|
|
||||||
|
# 定义一个返回城镇化率图表配置的路由
|
||||||
|
@router.get("/population/urbanization")
|
||||||
|
async def get_urbanization_rate_chart_config():
|
||||||
|
"""
|
||||||
|
获取城镇化率图表配置
|
||||||
|
"""
|
||||||
|
chart_config = generate_urbanization_rate_chart_config()
|
||||||
|
return chart_config
|
||||||
|
|
||||||
|
# 定义一个返回人口数据原始数据的路由
|
||||||
|
@router.get("/population/data")
|
||||||
|
async def get_population_data():
|
||||||
|
"""
|
||||||
|
获取人口数据原始数据
|
||||||
|
"""
|
||||||
|
population_data = load_population_data()
|
||||||
|
return {"data": population_data}
|
||||||
|
Binary file not shown.
@@ -38,7 +38,7 @@
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
.controls input {
|
.controls select, .controls input {
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
border: 1px solid #ddd;
|
border: 1px solid #ddd;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
@@ -51,6 +51,7 @@
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
.controls button:hover {
|
.controls button:hover {
|
||||||
background-color: #66b1ff;
|
background-color: #66b1ff;
|
||||||
@@ -60,6 +61,31 @@
|
|||||||
color: #666;
|
color: #666;
|
||||||
margin: 20px 0;
|
margin: 20px 0;
|
||||||
}
|
}
|
||||||
|
.tabs {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
.tab {
|
||||||
|
padding: 10px 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-bottom: none;
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
.tab.active {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
.tab-content {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.tab-content.active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -69,39 +95,127 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="chart-container">
|
<div class="chart-container">
|
||||||
|
<div class="tabs">
|
||||||
|
<div class="tab active" data-tab="population">人口数据图表</div>
|
||||||
|
<div class="tab" data-tab="urbanization">城镇化率图表</div>
|
||||||
|
<div class="tab" data-tab="demo">示例图表</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-content active" id="population-tab">
|
||||||
|
<h2>云南省各州市人口分布</h2>
|
||||||
|
<div class="controls">
|
||||||
|
<select id="yearSelect">
|
||||||
|
<option value="2020">2020年</option>
|
||||||
|
<option value="2021">2021年</option>
|
||||||
|
<option value="2022">2022年</option>
|
||||||
|
<option value="2023">2023年</option>
|
||||||
|
<option value="2024" selected>2024年</option>
|
||||||
|
</select>
|
||||||
|
<button id="loadPopulationChart">加载图表</button>
|
||||||
|
</div>
|
||||||
|
<div id="populationChart" class="chart"></div>
|
||||||
|
<div class="message" id="populationMessage">点击"加载图表"按钮获取数据</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-content" id="urbanization-tab">
|
||||||
|
<h2>云南省各州市城镇化率变化趋势</h2>
|
||||||
|
<div class="controls">
|
||||||
|
<button id="loadUrbanizationChart">加载图表</button>
|
||||||
|
</div>
|
||||||
|
<div id="urbanizationChart" class="chart"></div>
|
||||||
|
<div class="message" id="urbanizationMessage">点击"加载图表"按钮获取数据</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-content" id="demo-tab">
|
||||||
<h2>柱状图示例</h2>
|
<h2>柱状图示例</h2>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input type="text" id="chartTitle" placeholder="输入图表标题" value="Bar-MarkLine(自定义)">
|
<input type="text" id="chartTitle" placeholder="输入图表标题" value="Bar-MarkLine(自定义)">
|
||||||
<button id="loadChart">加载图表</button>
|
<button id="loadDemoChart">加载图表</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="barChart" class="chart"></div>
|
<div id="barChart" class="chart"></div>
|
||||||
<div class="message" id="message">点击"加载图表"按钮获取数据</div>
|
<div class="message" id="demoMessage">点击"加载图表"按钮获取数据</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// 初始化图表
|
// 初始化图表
|
||||||
|
var populationChart = echarts.init(document.getElementById('populationChart'));
|
||||||
|
var urbanizationChart = echarts.init(document.getElementById('urbanizationChart'));
|
||||||
var barChart = echarts.init(document.getElementById('barChart'));
|
var barChart = echarts.init(document.getElementById('barChart'));
|
||||||
|
|
||||||
// 显示加载中
|
// 显示加载中
|
||||||
function showLoading() {
|
function showLoading(chart, messageElement) {
|
||||||
barChart.showLoading();
|
chart.showLoading();
|
||||||
document.getElementById('message').textContent = '正在加载数据...';
|
messageElement.textContent = '正在加载数据...';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 隐藏加载中
|
// 隐藏加载中
|
||||||
function hideLoading() {
|
function hideLoading(chart) {
|
||||||
barChart.hideLoading();
|
chart.hideLoading();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示错误信息
|
// 显示错误信息
|
||||||
function showError(message) {
|
function showError(messageElement, message) {
|
||||||
document.getElementById('message').textContent = '错误: ' + message;
|
messageElement.textContent = '错误: ' + message;
|
||||||
console.error(message);
|
console.error(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载图表数据
|
// 加载人口数据图表
|
||||||
function loadChartData() {
|
function loadPopulationChartData() {
|
||||||
showLoading();
|
showLoading(populationChart, document.getElementById('populationMessage'));
|
||||||
|
|
||||||
|
// 获取选中的年份
|
||||||
|
var year = document.getElementById('yearSelect').value;
|
||||||
|
|
||||||
|
// 调用后端接口获取数据
|
||||||
|
fetch('/bigscreen/population/chart/' + year)
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('网络响应异常');
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
// 使用获取到的数据渲染图表
|
||||||
|
populationChart.setOption(data);
|
||||||
|
document.getElementById('populationMessage').textContent = '图表加载成功';
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
showError(document.getElementById('populationMessage'), error.message);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
hideLoading(populationChart);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载城镇化率图表
|
||||||
|
function loadUrbanizationRateChartData() {
|
||||||
|
showLoading(urbanizationChart, document.getElementById('urbanizationMessage'));
|
||||||
|
|
||||||
|
// 调用后端接口获取数据
|
||||||
|
fetch('/bigscreen/population/urbanization')
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('网络响应异常');
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
// 使用获取到的数据渲染图表
|
||||||
|
urbanizationChart.setOption(data);
|
||||||
|
document.getElementById('urbanizationMessage').textContent = '图表加载成功';
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
showError(document.getElementById('urbanizationMessage'), error.message);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
hideLoading(urbanizationChart);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载示例图表数据
|
||||||
|
function loadDemoChartData() {
|
||||||
|
showLoading(barChart, document.getElementById('demoMessage'));
|
||||||
|
|
||||||
// 获取图表标题
|
// 获取图表标题
|
||||||
var title = document.getElementById('chartTitle').value || 'Bar-MarkLine(自定义)';
|
var title = document.getElementById('chartTitle').value || 'Bar-MarkLine(自定义)';
|
||||||
@@ -117,27 +231,49 @@
|
|||||||
.then(data => {
|
.then(data => {
|
||||||
// 使用获取到的数据渲染图表
|
// 使用获取到的数据渲染图表
|
||||||
barChart.setOption(data);
|
barChart.setOption(data);
|
||||||
document.getElementById('message').textContent = '图表加载成功';
|
document.getElementById('demoMessage').textContent = '图表加载成功';
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
showError(error.message);
|
showError(document.getElementById('demoMessage'), error.message);
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
hideLoading();
|
hideLoading(barChart);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 页面加载完成后自动加载图表
|
// 页面加载完成后自动加载图表
|
||||||
window.addEventListener('DOMContentLoaded', function() {
|
window.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// 绑定标签页切换事件
|
||||||
|
document.querySelectorAll('.tab').forEach(tab => {
|
||||||
|
tab.addEventListener('click', function() {
|
||||||
|
// 移除所有标签页的active类
|
||||||
|
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
||||||
|
document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
|
||||||
|
|
||||||
|
// 添加当前标签页的active类
|
||||||
|
this.classList.add('active');
|
||||||
|
document.getElementById(this.dataset.tab + '-tab').classList.add('active');
|
||||||
|
|
||||||
|
// 调整图表大小
|
||||||
|
populationChart.resize();
|
||||||
|
urbanizationChart.resize();
|
||||||
|
barChart.resize();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// 绑定按钮点击事件
|
// 绑定按钮点击事件
|
||||||
document.getElementById('loadChart').addEventListener('click', loadChartData);
|
document.getElementById('loadPopulationChart').addEventListener('click', loadPopulationChartData);
|
||||||
|
document.getElementById('loadUrbanizationChart').addEventListener('click', loadUrbanizationRateChartData);
|
||||||
|
document.getElementById('loadDemoChart').addEventListener('click', loadDemoChartData);
|
||||||
|
|
||||||
// 自动加载图表
|
// 自动加载图表
|
||||||
loadChartData();
|
loadPopulationChartData();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 窗口大小变化时,重新调整图表大小
|
// 窗口大小变化时,重新调整图表大小
|
||||||
window.addEventListener('resize', function() {
|
window.addEventListener('resize', function() {
|
||||||
|
populationChart.resize();
|
||||||
|
urbanizationChart.resize();
|
||||||
barChart.resize();
|
barChart.resize();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
Reference in New Issue
Block a user