pyecharts分省GDP

from typing import List

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie, Line


data = [
{
"time": "1993年",
"data": [
{"name": "广东省", "value": [3469.0, 10.12, "广东省"]},
{"name": "江苏省", "value": [2998.0, 8.75, "江苏省"]},
{"name": "山东省", "value": [2770.0, 8.08, "山东省"]},
{"name": "辽宁省", "value": [2011.0, 5.87, "辽宁省"]},
{"name": "浙江省", "value": [1926.0, 5.62, "浙江省"]},
{"name": "河北省", "value": [1691.0, 4.93, "河北省"]},
{"name": "河南省", "value": [1660.0, 4.84, "河南省"]},
{"name": "上海市", "value": [1519.0, 4.43, "上海市"]},
{"name": "四川省", "value": [1486.0, 4.34, "四川省"]},
{"name": "湖北省", "value": [1326.0, 3.87, "湖北省"]},
{"name": "湖南省", "value": [1245.0, 3.63, "湖南省"]},
{"name": "黑龙江省", "value": [1198.0, 3.5, "黑龙江省"]},
{"name": "福建省", "value": [1114.0, 3.25, "福建省"]},
{"name": "安徽省", "value": [1037.0, 3.03, "安徽省"]},
{"name": "北京市", "value": [886.0, 2.59, "北京市"]},
{"name": "广西壮族自治区", "value": [872.0, 2.54, "广西壮族自治区"]},
{"name": "云南省", "value": [783.0, 2.28, "云南省"]},
{"name": "江西省", "value": [723.0, 2.11, "江西省"]},
{"name": "吉林省", "value": [719.0, 2.1, "吉林省"]},
{"name": "山西省", "value": [680.0, 1.98, "山西省"]},
{"name": "陕西省", "value": [678.0, 1.98, "陕西省"]},
{"name": "重庆市", "value": [609.0, 1.78, "重庆市"]},
{"name": "天津市", "value": [539.0, 1.57, "天津市"]},
{"name": "内蒙古", "value": [538.0, 1.57, "内蒙古"]},
{"name": "新疆维吾尔自治区", "value": [495.0, 1.44, "新疆维吾尔自治区"]},
{"name": "贵州省", "value": [418.0, 1.22, "贵州省"]},
{"name": "甘肃省", "value": [372.0, 1.09, "甘肃省"]},
{"name": "海南省", "value": [260.0, 0.76, "海南省"]},
{"name": "青海省", "value": [110.0, 0.32, "青海省"]},
{"name": "宁夏回族自治区", "value": [104.0, 0.3, "宁夏回族自治区"]},
{"name": "西藏自治区", "value": [37.0, 0.11, "西藏自治区"]},
],
},

{
"time": "1993年",
"data": [
{"name": "广东省", "value": [3469.0, 10.12, "广东省"]},
{"name": "江苏省", "value": [2998.0, 8.75, "江苏省"]},
{"name": "山东省", "value": [2770.0, 8.08, "山东省"]},
{"name": "辽宁省", "value": [2011.0, 5.87, "辽宁省"]},
{"name": "浙江省", "value": [1926.0, 5.62, "浙江省"]},
{"name": "河北省", "value": [1691.0, 4.93, "河北省"]},
{"name": "河南省", "value": [1660.0, 4.84, "河南省"]},
{"name": "上海市", "value": [1519.0, 4.43, "上海市"]},
{"name": "四川省", "value": [1486.0, 4.34, "四川省"]},
{"name": "湖北省", "value": [1326.0, 3.87, "湖北省"]},
{"name": "湖南省", "value": [1245.0, 3.63, "湖南省"]},
{"name": "黑龙江省", "value": [1198.0, 3.5, "黑龙江省"]},
{"name": "福建省", "value": [1114.0, 3.25, "福建省"]},
{"name": "安徽省", "value": [1037.0, 3.03, "安徽省"]},
{"name": "北京市", "value": [886.0, 2.59, "北京市"]},
{"name": "广西壮族自治区", "value": [872.0, 2.54, "广西壮族自治区"]},
{"name": "云南省", "value": [783.0, 2.28, "云南省"]},
{"name": "江西省", "value": [723.0, 2.11, "江西省"]},
{"name": "吉林省", "value": [719.0, 2.1, "吉林省"]},
{"name": "山西省", "value": [680.0, 1.98, "山西省"]},
{"name": "陕西省", "value": [678.0, 1.98, "陕西省"]},
{"name": "重庆市", "value": [609.0, 1.78, "重庆市"]},
{"name": "天津市", "value": [539.0, 1.57, "天津市"]},
{"name": "内蒙古", "value": [538.0, 1.57, "内蒙古"]},
{"name": "新疆维吾尔自治区", "value": [495.0, 1.44, "新疆维吾尔自治区"]},
{"name": "贵州省", "value": [418.0, 1.22, "贵州省"]},
{"name": "甘肃省", "value": [372.0, 1.09, "甘肃省"]},
{"name": "海南省", "value": [260.0, 0.76, "海南省"]},
{"name": "青海省", "value": [110.0, 0.32, "青海省"]},
{"name": "宁夏回族自治区", "value": [104.0, 0.3, "宁夏回族自治区"]},
{"name": "西藏自治区", "value": [37.0, 0.11, "西藏自治区"]},
],
}
]

time_list = [str(d) + "年" for d in range(1993, 1994)]

total_num = [
3.4,
4.5,
5.8,
6.8,
7.6,
8.3,
8.8,
9.9,
10.9,
12.1,
14,
16.8,
19.9,
23.3,
28,
33.3,
36.5,
43.7,
52.1,
57.7,
63.4,
68.4,
72.3,
78,
84.7,
91.5,
]
maxNum = 97300
minNum = 30


def get_year_chart(year: str):
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == year
][0]
min_data, max_data = (minNum, maxNum)
data_mark: List = []
i = 0
for x in time_list:
if x == year:
data_mark.append(total_num[i])
else:
data_mark.append("")
i = i + 1

map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
zoom=1,
center=[119.5, 34.5],
is_map_symbol_show=False,
itemstyle_opts={
"normal": {"areaColor": "#323c48", "borderColor": "#404a59"},
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="" + str(year) + "全国分地区GPD情况(单位:亿) 数据来源:国家统计局",
subtitle="",
pos_left="center",
pos_top="top",
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(255,255,255, 0.9)"
),
),
tooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="30",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)

line_chart = (
Line()
.add_xaxis(time_list)
.add_yaxis("", total_num)
.add_yaxis(
"",
data_mark,
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国GDP总量1993-2018年(单位:万亿)", pos_left="72%", pos_top="5%"
)
)
)
bar_x_data = [x[0] for x in map_data]
bar_y_data = [{"name": x[0], "value": x[1][0]} for x in map_data]
bar = (
Bar()
.add_xaxis(xaxis_data=bar_x_data)
.add_yaxis(
series_name="",
y_axis=bar_y_data,
label_opts=opts.LabelOpts(
is_show=True, position="right", formatter="{b} : {c}"
),
)
.reversal_axis()
.set_global_opts(
xaxis_opts=opts.AxisOpts(
max_=maxNum, axislabel_opts=opts.LabelOpts(is_show=False)
),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
tooltip_opts=opts.TooltipOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="top",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)

pie_data = [[x[0], x[1][0]] for x in map_data]
pie = (
Pie()
.add(
series_name="",
data_pair=pie_data,
radius=["15%", "35%"],
center=["80%", "82%"],
itemstyle_opts=opts.ItemStyleOpts(
border_width=1, border_color="rgba(0,0,0,0.3)"
),
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
legend_opts=opts.LegendOpts(is_show=False),
)
)

grid_chart = (
Grid()
.add(
bar,
grid_opts=opts.GridOpts(
pos_left="10", pos_right="45%", pos_top="50%", pos_bottom="5"
),
)
.add(
line_chart,
grid_opts=opts.GridOpts(
pos_left="65%", pos_right="80", pos_top="10%", pos_bottom="50%"
),
)
.add(pie, grid_opts=opts.GridOpts(pos_left="45%", pos_top="60%"))
.add(map_chart, grid_opts=opts.GridOpts())
)

return grid_chart


if __name__ == "__main__":
timeline = Timeline(
init_opts=opts.InitOpts(width="1600px", height="900px", theme=ThemeType.DARK)
)
for y in time_list:
g = get_year_chart(year=y)
timeline.add(g, time_point=str(y))

timeline.add_schema(
orient="vertical",
is_auto_play=True,
is_inverse=True,
play_interval=5000,
pos_left="null",
pos_right="5",
pos_top="20",
pos_bottom="20",
width="60",
label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)

timeline.render("china_gdp_from_1993_to_2018.html")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值