🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。
一、引言
大家好!今天我将带大家深入分析2025年上半年广东省各市的GDP数据,并使用Python的pyecharts库进行炫酷的可视化展示。我们将从多个角度分析数据,并最终生成一个可移动的可视化大屏。
二、数据准备
使用Python和pyecharts创建一个炫酷的可视化大屏,全面分析2025年上半年广东省各市的GDP表现。
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Map, Grid, Page, Scatter, Radar
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType
import random
# 数据准备
data = {
"序号": list(range(1, 22)),
"地区": ["深圳市", "广州市", "佛山市", "东莞市", "惠州市", "珠海市", "中山市", "江门市", "茂名市", "湛江市",
"汕头市", "肇庆市", "揭阳市", "清远市", "韶关市", "阳江市", "汕尾市", "梅州市", "潮州市", "河源市", "云浮市"],
"2025年上半年": [18322.26, 15080.99, 6366.87, 6067.84, 2910.06, 2243.65, 1974.65, 1942.62, 1902.66, 1811.26,
1500.81, 1358.01, 1219.89, 1068.55, 780.8, 768.02, 739.95, 720.59, 679.74, 668.71, 597.48],
"2024年同期": [17302.22, 14297.66, 6122.89, 5686.8, 2645.3, 2174.26, 1885, 1876.4, 1843.76, 1725.61,
1493.27, 1246.89, 1210.8, 1016.98, 757.14, 771.15, 679.38, 657.84, 654, 628.55, 566.61],
"增量": [1020.04, 783.33, 243.98, 381.04, 264.76, 69.39, 89.65, 66.22, 58.9, 85.65, 7.54, 111.12, 9.09, 51.57,
23.66, -3.13, 60.57, 62.75, 25.74, 40.16, 30.87],
"名义增长率(%)": [5.9, 5.48, 3.98, 6.7, 10.01, 3.19, 4.76, 3.53, 3.19, 4.96, 0.5, 8.91, 0.75, 5.07, 3.12, -0.41,
8.92, 9.54, 3.94, 6.39, 5.45]
}
df = pd.DataFrame(data)
# 计算占比
total_gdp = df["2025年上半年"].sum()
df["占比"] = df["2025年上半年"].apply(lambda x: round(x / total_gdp * 100, 2))
# 生成随机渐变颜色
def generate_gradient_colors(n, start_color, end_color):
colors = []
for i in range(n):
r = start_color[0] + (end_color[0] - start_color[0]) * i // n
g = start_color[1] + (end_color[1] - start_color[1]) * i // n
b = start_color[2] + (end_color[2] - start_color[2]) * i // n
colors.append(f"#{r:02x}{g:02x}{b:02x}")
return colors
2.1 柱状图:2025年上半年GDP排名(3D效果)
# 1. 柱状图:2025年上半年GDP排名(3D效果)
def bar_chart() -> Bar:
# 排序数据
df_sorted = df.sort_values(by="2025年上半年", ascending=False)
# 生成渐变颜色
colors = generate_gradient_colors(len(df_sorted), (30, 144, 255), (0, 191, 255))
bar = (
Bar(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add_xaxis(df_sorted["地区"].tolist())
.add_yaxis(
"2025年上半年GDP(亿元)",
df_sorted["2025年上半年"].tolist(),
itemstyle_opts=opts.ItemStyleOpts(
color=JsCode(
"""
function(params) {
var colors = %s;
return colors[params.dataIndex];
}
""" % colors
)
),
category_gap="50%",
bar_width=20
# label_opts=opts.LabelOpts(
# position="top",
# formatter=JsCode(
# "function(params){return params.value[1] + '亿元';}"
# ),
# color="#fff",
# font_size=12
# )
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="2025年上半年广东省各市GDP排名",
title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=18),
subtitle="深圳和广州遥遥领先,其他城市差距明显",
subtitle_textstyle_opts=opts.TextStyleOpts(color="#aaa", font_size=14),
pos_left="center",
pos_top="10"
),
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(color="#fff", rotate=45, font_size=10),
splitline_opts=opts.SplitLineOpts(is_show=False)
),
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(color="#fff", font_size=10),
name="GDP(亿元)",
name_textstyle_opts=opts.TextStyleOpts(color="#fff"),
splitline_opts=opts.SplitLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(color="rgba(255,255,255,0.1)")
)
),
datazoom_opts=[opts.DataZoomOpts(type_="inside")],
toolbox_opts=opts.ToolboxOpts(
is_show=True,
feature={
"saveAsImage": {"title": "保存图片", "pixel_ratio": 2},
"restore": {"title": "重置视图"},
"dataView": {"title": "数据视图", "readOnly": True},
"magicType": {"type": ["line", "bar"], "title": {"line": "折线图", "bar": "柱状图"}}
}
),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
rotation=JsCode("Math.PI / 4"),
bounding="raw",
right=100,
bottom=110,
z=100
),
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(
left="center",
top="center"
),
graphic_shape_opts=opts.GraphicShapeOpts(
width=400,
height=50
),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="rgba(0,0,0,0.3)"
)
),
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center",
top="center",
z=100
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text="广东省GDP分析大屏",
font="bold 26px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#fff"
)
)
)
]
)
]
)
)
return bar
2.2 折线图:名义增长率对比(带动态效果)
# 2. 折线图:名义增长率对比(带动态效果)
def line_chart() -> Line:
# 排序数据
df_sorted = df.sort_values(by="名义增长率(%)", ascending=False)
# 生成气泡大小数据(基于GDP)
size_data = [np.log(x) * 10 for x in df_sorted["2025年上半年"]]
line = (
Line(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add_xaxis(df_sorted["地区"].tolist())
.add_yaxis(
"名义增长率(%)",
df_sorted["名义增长率(%)"].tolist(),
symbol="roundRect",
symbol_size=size_data,
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=True, color="#fff", formatter="{c}%"),
linestyle_opts=opts.LineStyleOpts(width=3, color="#ff7f50", type_="solid"),
itemstyle_opts=opts.ItemStyleOpts(color="#ff7f50", border_width=2, border_color="#fff"),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最高增长率"),
opts.MarkPointItem(type_="min", name="最低增长率"),
opts.MarkPointItem(type_="average", name="平均增长率")
],
label_opts=opts.LabelOpts(color="#fff", position="inside")
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均增长率")],
label_opts=opts.LabelOpts(color="#fff", position="middle")
)
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="2025年上半年名义增长率对比",
title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=16),
subtitle="气泡大小代表GDP规模",
subtitle_textstyle_opts=opts.TextStyleOpts(color="#aaa", font_size=12),
pos_left="center",
pos_top="10"
),
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(color="#fff", rotate=45, font_size=10),
splitline_opts=opts.SplitLineOpts(is_show=False)
),
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(color="#fff", font_size=10, formatter="{value}%"),
name="增长率(%)",
name_textstyle_opts=opts.TextStyleOpts(color="#fff"),
splitline_opts=opts.SplitLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(color="rgba(255,255,255,0.1)")
)
),
tooltip_opts=opts.TooltipOpts(
trigger="axis",
formatter=JsCode(
"function(params){"
"var value = params[0].value;"
"var city = params[0].name;"
"var gdp = %s[city];"
"return city + '<br/>' + '增长率: ' + value + '%%<br/>' + 'GDP: ' + gdp + '亿元';"
"}" % {city: gdp for city, gdp in zip(df["地区"], df["2025年上半年"])}
),
border_color="#aaa",
textstyle_opts=opts.TextStyleOpts(color="#fff")
),
datazoom_opts=[opts.DataZoomOpts(type_="inside")],
visualmap_opts=opts.VisualMapOpts(
type_="size",
min_=min(size_data),
max_=max(size_data),
dimension=1,
orient="horizontal",
pos_left="center",
pos_bottom="0",
textstyle_opts=opts.TextStyleOpts(color="#fff")
)
)
)
return line
2.3 饼图:GDP占比(玫瑰图形式)
# 3. 饼图:GDP占比(玫瑰图形式)
def pie_chart() -> Pie:
# 只显示前8名,其余合并为"其他"
top8 = df.nlargest(8, "2025年上半年")
other_gdp = total_gdp - top8["2025年上半年"].sum()
other_percent = round(other_gdp / total_gdp * 100, 2)
pie_data = list(zip(top8["地区"], top8["占比"]))
pie_data.append(("其他地区", other_percent))
# 生成渐变颜色
colors = generate_gradient_colors(len(pie_data), (255, 105, 180), (255, 20, 147))
pie = (
Pie(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add(
"",
pie_data,
radius=["30%", "75%"],
center=["50%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(
formatter=JsCode(
"function(params) {"
"return params.name + ': ' + params.percent + '%%';"
"}"
),
color="#fff"
),
itemstyle_opts=opts.ItemStyleOpts(
border_width=1,
border_color="#000"
)
)
.set_colors(colors)
.set_global_opts(
title_opts=opts.TitleOpts(
title="2025年上半年GDP占比分布",
title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=16),
subtitle="深圳和广州占比超过60%",
subtitle_textstyle_opts=opts.TextStyleOpts(color="#aaa", font_size=12),
pos_left="center",
pos_top="10"
),
legend_opts=opts.LegendOpts(
orient="vertical",
pos_left="left",
textstyle_opts=opts.TextStyleOpts(color="#fff")
),
tooltip_opts=opts.TooltipOpts(
formatter="{b}: {c}% ({d}%)",
border_color="#aaa",
textstyle_opts=opts.TextStyleOpts(color="#fff")
)
)
.set_series_opts(
label_opts=opts.LabelOpts(
position="outside",
formatter="{b}: {c}%",
color="#fff"
)
)
)
return pie
2.4 地图:广东省各市GDP分布(3D效果)
# 4. 地图:广东省各市GDP分布(3D效果)
def map_chart() -> Map:
map_data = [[city, gdp] for city, gdp in zip(df["地区"], df["2025年上半年"])]
map_ = (
Map(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add(
"GDP(亿元)",
map_data,
"广东",
is_map_symbol_show=False,
label_opts=opts.LabelOpts(
is_show=True,
# color="#fff",
# formatter=JsCode(
# "function(params){"
# "return params.name + '\n' + params.value[1] + '亿元';"
# "}"
# )
),
itemstyle_opts=opts.ItemStyleOpts(
border_color="#000",
border_width=1
)
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="广东省各市GDP地理分布",
title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=16),
subtitle="珠三角地区经济实力突出",
subtitle_textstyle_opts=opts.TextStyleOpts(color="#aaa", font_size=12),
pos_left="center",
pos_top="10"
),
visualmap_opts=opts.VisualMapOpts(
min_=500,
max_=18000,
is_piecewise=True,
pieces=[
{"min": 15000, "label": "15000亿元以上", "color": "#8B0000"},
{"min": 6000, "max": 14999, "label": "6000-14999亿元", "color": "#CD5C5C"},
{"min": 2000, "max": 5999, "label": "2000-5999亿元", "color": "#F08080"},
{"min": 1000, "max": 1999, "label": "1000-1999亿元", "color": "#FFA07A"},
{"min": 0, "max": 999, "label": "1000亿元以下", "color": "#FFDAB9"}
],
textstyle_opts=opts.TextStyleOpts(color="#fff"),
pos_left="10",
pos_bottom="20"
)
# tooltip_opts=opts.TooltipOpts(
# # formatter=JsCode(
# # "function(params){"
# # "return params.name + '<br/>GDP: ' + params.value[1] + '亿元';"
# # "}"
# # ),
# border_color="#aaa",
# textstyle_opts=opts.TextStyleOpts(color="#fff")
# )
)
)
return map_
2.5 散点图:GDP规模与增长率关系
# 5. 散点图:GDP规模与增长率关系
def scatter_chart() -> Scatter:
scatter = (
Scatter(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add_xaxis(df["2025年上半年"].tolist())
.add_yaxis(
"增长率",
df["名义增长率(%)"].tolist(),
symbol_size=[np.log(gdp) * 5 for gdp in df["2025年上半年"]],
label_opts=opts.LabelOpts(
formatter=JsCode(
"function(params){"
"return %s[params.dataIndex];"
"}" % df["地区"].tolist()
),
position="top",
color="#fff"
),
itemstyle_opts=opts.ItemStyleOpts(
color=JsCode(
"function(params) {"
"return params.value[1] > 8 ? '#FF4500' : (params.value[1] > 5 ? '#32CD32' : '#1E90FF');"
"}"
)
)
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="GDP规模与增长率关系",
title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=16),
subtitle="气泡大小代表GDP规模",
subtitle_textstyle_opts=opts.TextStyleOpts(color="#aaa", font_size=12),
pos_left="center",
pos_top="10"
),
xaxis_opts=opts.AxisOpts(
type_="value",
name="GDP(亿元)",
name_textstyle_opts=opts.TextStyleOpts(color="#fff"),
axislabel_opts=opts.LabelOpts(color="#fff"),
splitline_opts=opts.SplitLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(color="rgba(255,255,255,0.1)")
)
),
yaxis_opts=opts.AxisOpts(
type_="value",
name="增长率(%)",
name_textstyle_opts=opts.TextStyleOpts(color="#fff"),
axislabel_opts=opts.LabelOpts(color="#fff", formatter="{value}%"),
splitline_opts=opts.SplitLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(color="rgba(255,255,255,0.1)")
)
),
tooltip_opts=opts.TooltipOpts(
formatter=JsCode(
"function(params){"
"var city = %s[params.dataIndex];"
"var gdp = params.value[0];"
"var growth = params.value[1];"
"return city + '<br/>GDP: ' + gdp + '亿元<br/>增长率: ' + growth + '%%';"
"}" % df["地区"].tolist()
),
border_color="#aaa",
textstyle_opts=opts.TextStyleOpts(color="#fff")
),
visualmap_opts=opts.VisualMapOpts(
type_="size",
min_=min(df["2025年上半年"]),
max_=max(df["2025年上半年"]),
dimension=0,
orient="horizontal",
pos_left="center",
pos_bottom="0",
textstyle_opts=opts.TextStyleOpts(color="#fff")
)
)
)
return scatter
2.6 雷达图:前五城市多维度对比
# 6. 雷达图:前五城市多维度对比
def radar_chart() -> Radar:
top5 = df.nlargest(5, "2025年上半年")
indicators = [
{"name": "GDP(亿元)", "max": 20000},
{"name": "增量(亿元)", "max": 1200},
{"name": "增长率(%)", "max": 12},
{"name": "占比(%)", "max": 35}
]
# 归一化到 0-100 便于雷达图展示
def normalize(series, max_val):
return (series / max_val * 100).tolist()
radar = (
Radar(init_opts=opts.InitOpts(bg_color="#0d0d0d", theme=ThemeType.DARK))
.add_schema(schema=indicators, textstyle_opts=opts.TextStyleOpts(color="#fff"))
)
for _, row in top5.iterrows():
radar.add(
row["地区"],
[[row["2025年上半年"], row["增量"], row["名义增长率(%)"], row["占比"]]],
areastyle_opts=opts.AreaStyleOpts(opacity=0.3)
)
return radar
三、生成组合大屏
page = Page(page_title="2025上半年广东 GDP 大屏")
page.add(bar_chart(), line_chart(), pie_chart(), map_chart(), scatter_chart(), radar_chart())
page.render("guangdong_gdp_dashboard.html")
print("✅ 可视化大屏已生成:guangdong_gdp_dashboard.html")
四、数据分析与可视化解读
4.1 GDP总量排名分析
- 深圳和广州双核驱动:深圳市以18322.26亿元位居榜首,广州市以15080.99亿元紧随其后,两市GDP占全省总量的60%以上。
- 珠三角城市群优势明显:佛山、东莞、惠州等珠三角城市GDP总量排名靠前,形成了明显的经济集群效应。
- 区域发展不平衡:云浮市(597.48亿元)与深圳市的差距达到30倍,显示出广东省内经济发展的不平衡性。
4.2 经济增长率分析
- 惠州领跑全省:惠州市以10.01%的名义增长率位居全省第一,显示出强劲的发展势头。
- 汕尾、梅州表现亮眼:汕尾市(8.92%)和梅州市(9.54%)增速高于全省平均水平,显示出粤东地区的发展潜力。
- 阳江负增长:阳江市是全省唯一出现负增长的城市(-0.41%),需要关注其经济结构调整问题。
4.3 GDP地理分布特征
- 珠三角核心区主导:深圳、广州、佛山、东莞等城市形成的珠三角核心区GDP总量占全省70%以上。
- 沿海经济带优势:珠海、中山、江门等沿海城市经济表现优于内陆城市。
- 粤北地区发展滞后:河源、云浮等粤北山区城市经济规模相对较小,需要加强区域协调发展。
4.4 规模与增长关系
- 高增长城市规模中等:惠州市(2910.06亿元)和汕尾市(739.95亿元)等中等规模城市增长率较高。
- 大城市增速放缓:深圳(5.9%)、广州(5.48%)等超大城市增速低于全省平均,但增量巨大。
- 中小城市分化明显:部分中小城市如肇庆(8.91%)、梅州(9.54%)增速较快,而汕头(0.5%)、揭阳(0.75%)增速较慢。
4.5 前五城市多维度对比
- 深圳全面领先:在GDP规模、增量和占比方面均大幅领先其他城市。
- 广州增量优势:广州的增量(783.33亿元)仅次于深圳(1020.04亿元)。
- 惠州增长突出:在增长率指标上,惠州(10.01%)明显领先其他四市。
六、政策建议
- 强化珠三角核心引擎作用:继续支持深圳、广州发挥引领作用,带动全省经济发展。
- 促进区域协调发展:加大对粤东、粤西、粤北地区的支持力度,缩小区域发展差距。
- 培育新的增长极:支持惠州、珠海等次中心城市发展,形成多中心发展格局。
- 推动产业转型升级:引导阳江等负增长城市加快产业结构调整,培育新的经济增长点。
- 加强基础设施互联互通:完善全省交通网络,促进要素自由流动和优化配置。
七、结论
2025年上半年广东省各市GDP数据可视化分析显示,广东省经济发展呈现以下特点:
- 珠三角核心区继续保持强劲发展势头
- 粤东地区部分城市增长迅猛
- 区域发展不平衡问题依然突出
- 城市发展呈现"大而稳"与"快而新"并存的特征
通过本次可视化分析,我们全面掌握了广东省各市经济发展状况,为制定区域发展政策提供了数据支持。运行上述代码后,将生成一个名为guangdong_gdp_dashboard.html的炫酷可视化大屏,用浏览器打开即可查看完整效果。
如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)
期待与您一起交流,共同探索AI的更多可能!