This commit is contained in:
2025-09-10 20:18:01 +08:00
parent f5244f3e66
commit 729735f412
7 changed files with 347 additions and 325 deletions

View File

@@ -23,3 +23,7 @@ async def get_urbanization_rate_chart_config():
async def get_preschool_education_chart_config():
return RuYuanZaiYuanModel.generate_preschool_education_config()
@router.get("/school/preschool/inschool/chart")
async def get_preschool_in_school_chart_config():
return RuYuanZaiYuanModel.generate_in_school_education_config()

502
Log/1.log
View File

@@ -1,316 +1,186 @@
{
"animation": true,
"animationThreshold": 2000,
"animationDuration": 1000,
"animationEasing": "cubicOut",
"animationDelay": 0,
"animationDurationUpdate": 300,
"animationEasingUpdate": "cubicOut",
"animationDelayUpdate": 0,
"aria": {
"enabled": false
},
"color": [
"#5470c6",
"#91cc75",
"#fac858",
"#ee6666",
"#73c0de",
"#3ba272",
"#fc8452",
"#9a60b4",
"#ea7ccc"
],
"series": [
{
"type": "bar",
"name": "总人口",
"legendHoverLink": true,
"data": [],
"realtimeSort": false,
"showBackground": false,
"stack": "stack1",
"stackStrategy": "samesign",
"cursor": "pointer",
"barMinHeight": 0,
"barCategoryGap": "20%",
"barGap": "30%",
"large": false,
"largeThreshold": 400,
"seriesLayoutBy": "column",
"datasetIndex": 0,
"clip": true,
"zlevel": 0,
"z": 2,
"label": {
"show": false,
"margin": 8,
"valueAnimation": false
},
"markLine": {
"silent": false,
"precision": 2,
"label": {
"show": true,
"margin": 8,
"valueAnimation": false
},
"data": [
{
"name": "平均值",
"type": "average"
}
]
},
"rippleEffect": {
"show": true,
"brushType": "stroke",
"scale": 2.5,
"period": 4
}
},
{
"type": "bar",
"name": "城镇人口",
"legendHoverLink": true,
"data": [],
"realtimeSort": false,
"showBackground": false,
"stack": "stack1",
"stackStrategy": "samesign",
"cursor": "pointer",
"barMinHeight": 0,
"barCategoryGap": "20%",
"barGap": "30%",
"large": false,
"largeThreshold": 400,
"seriesLayoutBy": "column",
"datasetIndex": 0,
"clip": true,
"zlevel": 0,
"z": 2,
"label": {
"show": false,
"margin": 8,
"valueAnimation": false
},
"markLine": {
"silent": false,
"precision": 2,
"label": {
"show": true,
"margin": 8,
"valueAnimation": false
},
"data": [
{
"name": "平均值",
"type": "average"
}
]
},
"rippleEffect": {
"show": true,
"brushType": "stroke",
"scale": 2.5,
"period": 4
}
},
{
"type": "bar",
"name": "农村人口",
"legendHoverLink": true,
"data": [],
"realtimeSort": false,
"showBackground": false,
"stack": "stack1",
"stackStrategy": "samesign",
"cursor": "pointer",
"barMinHeight": 0,
"barCategoryGap": "20%",
"barGap": "30%",
"large": false,
"largeThreshold": 400,
"seriesLayoutBy": "column",
"datasetIndex": 0,
"clip": true,
"zlevel": 0,
"z": 2,
"label": {
"show": false,
"margin": 8,
"valueAnimation": false
},
"markLine": {
"silent": false,
"precision": 2,
"label": {
"show": true,
"margin": 8,
"valueAnimation": false
},
"data": [
{
"name": "平均值",
"type": "average"
}
]
},
"rippleEffect": {
"show": true,
"brushType": "stroke",
"scale": 2.5,
"period": 4
}
}
],
"legend": [
{
"data": [
"总人口",
"城镇人口",
"农村人口"
],
"selected": {},
"show": true,
"top": "5%",
"padding": 5,
"itemGap": 10,
"itemWidth": 25,
"itemHeight": 14,
"backgroundColor": "transparent",
"borderColor": "#ccc",
"borderRadius": 0,
"pageButtonItemGap": 5,
"pageButtonPosition": "end",
"pageFormatter": "{current}/{total}",
"pageIconColor": "#2f4554",
"pageIconInactiveColor": "#aaa",
"pageIconSize": 15,
"animationDurationUpdate": 800,
"selector": false,
"selectorPosition": "auto",
"selectorItemGap": 7,
"selectorButtonGap": 10
}
],
"tooltip": {
"show": true,
"trigger": "axis",
"triggerOn": "mousemove|click",
"axisPointer": {
"type": "shadow"
},
"showContent": true,
"alwaysShowContent": false,
"showDelay": 0,
"hideDelay": 100,
"enterable": false,
"confine": false,
"appendToBody": false,
"transitionDuration": 0.4,
"textStyle": {
"fontSize": 14
},
"borderWidth": 0,
"padding": 5,
"order": "seriesAsc"
},
"xAxis": [
{
"show": true,
"scale": false,
"nameLocation": "end",
"nameGap": 15,
"gridIndex": 0,
"axisLabel": {
"show": true,
"rotate": 45,
"margin": 8,
"valueAnimation": false
},
"inverse": false,
"offset": 0,
"splitNumber": 5,
"minInterval": 0,
"splitLine": {
"show": true,
"lineStyle": {
"show": true,
"width": 1,
"opacity": 1,
"curveness": 0,
"type": "solid"
}
},
"animation": true,
"animationThreshold": 2000,
"animationDuration": 1000,
"animationEasing": "cubicOut",
"animationDelay": 0,
"animationDurationUpdate": 300,
"animationEasingUpdate": "cubicOut",
"animationDelayUpdate": 0,
"data": []
}
],
"yAxis": [
{
"name": "人口数量(万人)",
"show": true,
"scale": false,
"nameLocation": "middle",
"nameGap": 40,
"gridIndex": 0,
"inverse": false,
"offset": 0,
"splitNumber": 5,
"minInterval": 0,
"splitLine": {
"show": true,
"lineStyle": {
"show": true,
"width": 1,
"opacity": 1,
"curveness": 0,
"type": "solid"
}
},
"animation": true,
"animationThreshold": 2000,
"animationDuration": 1000,
"animationEasing": "cubicOut",
"animationDelay": 0,
"animationDurationUpdate": 300,
"animationEasingUpdate": "cubicOut",
"animationDelayUpdate": 0
}
],
"title": [
{
"show": true,
"text": "云南省各州市人口分布图2024年",
"target": "blank",
"subtarget": "blank",
"padding": 5,
"itemGap": 10,
"textAlign": "auto",
"textVerticalAlign": "auto",
"triggerEvent": false
}
],
"dataZoom": [
{
"show": true,
"type": "slider",
"showDetail": true,
"showDataShadow": true,
"realtime": true,
"start": 20,
"end": 80,
"orient": "horizontal",
"zoomLock": false,
"filterMode": "filter"
}
]
}
C:\Users\Administrator\.conda\envs\yunnan\python.exe D:\dsWork\YunNanProject\Start.py
INFO: Started server process [2204]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8100 (Press CTRL+C to quit)
INFO: 127.0.0.1:62068 - "GET /static/preschool_education.html HTTP/1.1" 200 OK
INFO: 127.0.0.1:62068 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK
INFO: 127.0.0.1:62068 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app
await route.handle(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle
await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app
response = await f(request)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app
raw_response = await run_endpoint_function(
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function
return await dependant.call(**values)
File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config
return RuYuanZaiYuanModel.generate_in_school_education_config()
File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config
in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {})
KeyError: 'education_data'
INFO: 127.0.0.1:62715 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app
await route.handle(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle
await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app
response = await f(request)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app
raw_response = await run_endpoint_function(
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function
return await dependant.call(**values)
File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config
return RuYuanZaiYuanModel.generate_in_school_education_config()
File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config
in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {})
KeyError: 'education_data'
INFO: 127.0.0.1:62715 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error
INFO: 127.0.0.1:54014 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK
INFO: 127.0.0.1:54014 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app
await route.handle(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle
await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app
response = await f(request)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app
raw_response = await run_endpoint_function(
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function
return await dependant.call(**values)
File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config
return RuYuanZaiYuanModel.generate_in_school_education_config()
File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config
in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {})
KeyError: 'education_data'
INFO: 127.0.0.1:59952 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK
INFO: 127.0.0.1:59952 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app
await route.handle(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle
await self.app(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app
raise exc
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app
response = await f(request)
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app
raw_response = await run_endpoint_function(
File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function
return await dependant.call(**values)
File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config
return RuYuanZaiYuanModel.generate_in_school_education_config()
File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config
in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {})
KeyError: 'education_data'

View File

@@ -51,10 +51,6 @@ class RuYuanZaiYuanModel:
# 计算总和作为总入园数而非使用文件中的total字段
calculated_total = enroll_data.get("urban", 0) + enroll_data.get("town", 0) + enroll_data.get("rural", 0)
total_enroll.append(calculated_total / 10000) # 转换为万人
# print(f"{year}年城区入园数: {enroll_data.get('urban', 0)}")
# print(f"{year}年镇区入园数: {enroll_data.get('town', 0)}")
# print(f"{year}年乡村入园数: {enroll_data.get('rural', 0)}")
# print(f"{year}年入园数: {calculated_total}")
# 构建ECharts配置
option = {
@@ -109,7 +105,7 @@ class RuYuanZaiYuanModel:
"type": "value",
"name": "总入园数",
"min": 0,
"max": 140, # 增加最大值以留出更多空间
"max": 140,
"interval": 20,
"position": "right",
"nameLocation": "end", # 将名称放在轴末端
@@ -176,3 +172,149 @@ class RuYuanZaiYuanModel:
}
}
return option
@staticmethod
def generate_in_school_education_config():
# 获取学前教育相关数据
enrollment_data, in_school_data = RuYuanZaiYuanModel.load_student_data()
# 提取云南省级数据
yunnan_in_school = next((item for item in in_school_data if item["area_name"] == "云南省"), None)
if not yunnan_in_school:
return {}
# 提取年份数据(2015-2024)
years = [str(year) for year in range(2015, 2025)]
# 构建学前教育数据
urban_data = [] # 城区数据
town_data = [] # 镇区数据
rural_data = [] # 乡村数据
total_in_school = [] # 总在园数
for year in years:
# 将education_data改为student_data
in_school_year_data = yunnan_in_school["student_data"]["preschool"].get(year, {})
urban_data.append(in_school_year_data.get("urban", 0) / 10000) # 转换为万人
town_data.append(in_school_year_data.get("town", 0) / 10000) # 转换为万人
rural_data.append(in_school_year_data.get("rural", 0) / 10000) # 转换为万人
# 计算总和作为总在园数
calculated_total = in_school_year_data.get("urban", 0) + in_school_year_data.get("town", 0) + in_school_year_data.get("rural", 0)
total_in_school.append(calculated_total / 10000) # 转换为万人
# 构建ECharts配置
option = {
"tooltip": {
"trigger": "axis",
"axisPointer": {
"type": "cross",
"crossStyle": {"color": "#999"}
},
"textStyle": {"color": "#333"},
"backgroundColor": "rgba(255, 255, 255, 0.8)",
"borderColor": "rgba(0, 0, 0, 0.2)",
"borderWidth": 1
},
"legend": {
"data": ["城区", "镇区", "乡村", "总在园数"],
"top": 30,
"textStyle": {"color": "#333"},
"icon": "roundRect",
"itemWidth": 12,
"itemHeight": 12
},
"xAxis": [
{
"type": "category",
"data": years,
"axisPointer": {"type": "shadow"},
"axisLabel": {"color": "#333"},
"axisLine": {"lineStyle": {"color": "#333"}}
}
],
"yAxis": [
{
"type": "value",
"name": "人数",
"min": 0,
"max": 100,
"interval": 20,
"axisLabel": {
"formatter": "{value} 万人",
"color": "#333"
},
"axisLine": {"lineStyle": {"color": "#333"}},
"splitLine": {"lineStyle": {"color": "rgba(0,0,0,0.1)"}}
},
{
"type": "value",
"name": "总在园数",
"min": 0,
"max": 140,
"interval": 20,
"position": "right",
"nameLocation": "end",
"nameGap": 30,
"axisLabel": {
"formatter": "{value} 万人",
"color": "#ee6666"
},
"axisLine": {"show": True, "lineStyle": {"color": "#ee6666"}},
"axisTick": {"show": True},
"splitLine": {"show": False}
}
],
"series": [
{
"name": "城区",
"type": "bar",
"data": urban_data,
"itemStyle": {
"color": "#5470c6",
"borderRadius": [6, 6, 0, 0]
},
"barWidth": "25%",
"barGap": "-10%"
},
{
"name": "镇区",
"type": "bar",
"data": town_data,
"itemStyle": {
"color": "#91cc75",
"borderRadius": [6, 6, 0, 0]
},
"barWidth": "25%",
"barGap": "-10%"
},
{
"name": "乡村",
"type": "bar",
"data": rural_data,
"itemStyle": {
"color": "#fac858",
"borderRadius": [6, 6, 0, 0]
},
"barWidth": "25%",
"barGap": "-10%"
},
{
"name": "总在园数",
"type": "line",
"yAxisIndex": 1,
"data": total_in_school,
"lineStyle": {"color": "#ee6666", "width": 3},
"symbol": "circle",
"symbolSize": 8,
"itemStyle": {"color": "#ee6666"}
}
],
"grid": {
"left": "3%",
"right": "8%",
"bottom": "3%",
"containLabel": True
}
}
return option

View File

@@ -17,4 +17,4 @@ app.include_router(bigscreen_router)
# 主程序入口
if __name__ == "__main__":
# 启动 FastAPI 应用,监听 8200 端口
uvicorn.run(app, host="0.0.0.0", port=8200)
uvicorn.run(app, host="0.0.0.0", port=8100)

View File

@@ -95,7 +95,13 @@
// 加载学前教育数据
function loadPreschoolData() {
showLoading();
$.getJSON('/bigscreen/school/preschool/chart')
// 根据当前类型加载不同数据
var url = currentType === 'enroll' ?
'/bigscreen/school/preschool/chart' :
'/bigscreen/school/preschool/inschool/chart';
$.getJSON(url)
.done(function(data) {
chartData = data;
renderChart();
@@ -116,7 +122,7 @@
$('.btn').removeClass('active');
$(this).addClass('active');
currentType = $(this).data('type');
renderChart();
loadPreschoolData(); // 点击按钮后重新加载数据,而不是只渲染
});
// 窗口大小变化时调整图表