目录
前言
本文将介绍如何利用Python的Pyecharts库来绘制一张反映中国四个直辖市(北京、上海、天津和重庆)自2003年至2022年的总人口变化趋势的折线图。
一、导入所需库和创建Line对象
导入库
import pyecharts.options as opts
from pyecharts.charts import Line
创建对象
line = Line()
二、打开并读取CSV文件
这里我们打开了一个名为“分省年度数据(1).csv”的CSV文件,并将其内容读取到一个名为line_datas
的列表中。需要注意的是,我们使用了gbk
编码来处理文件,这是因为有些中文字符可能会导致乱码。
三、处理数据
这部分代码首先删除了CSV文件的前三行(可能是标题),然后获取了第一行(即年份)的数据,并将其反序。接着,遍历剩余的每一行数据,根据城市名称(北京市、上海市、天津市、重庆市)将数据添加到相应的列表中。
for _ in range(3):
line_datas.pop(0)
x_data_year = line_datas.pop(0).replace('\n', '').split(',')
x_data_year.pop(0)
x_data_year.reverse()
y_data_bj = []
y_data_sh = []
y_data_tj = []
y_data_cq = []
for line_data in line_datas:
line_data = line_data.replace("\n", "").split(",")
if line_data[0] == "北京市":
line_data.pop(0)
line_data.reverse()
y_data_bj = line_data
elif line_data[0] == "上海市":
line_data.pop(0)
line_data.reverse()
y_data_sh = line_data
elif line_data[0] == "天津市":
line_data.pop(0)
line_data.reverse()
y_data_tj = line_data
elif line_data[0] == "重庆市":
line_data.pop(0)
line_data.reverse()
y_data_cq = line_data
四、添加数据到Line对象和设置全局选项
这里我们将年份数据添加到了x轴上,然后分别将四个城市的历年数据添加到了Line对象中。
line.add_xaxis(x_data_year)
line.add_yaxis("重庆市历年人口", y_data_cq)
line.add_yaxis("北京市历年人口", y_data_bj)
line.add_yaxis("上海市历年人口", y_data_sh)
line.add_yaxis("天津市历年人口", y_data_tj)
最后,我们设置了图表的标题和位置。
line.set_global_opts(title_opts=opts.TitleOpts(title="2003-2022年直辖市总人口折线图", pos_right="center", pos_bottom="1%"))
这一步将生成的折线图保存为HTML文件,方便查看。
line.render("../demo/line_4city_population.html")
总结
以上就是利用Pyecharts绘制直辖市人口折线图的基本步骤。通过这个过程,我们可以清晰地看到各直辖市的人口变化趋势,有助于我们了解不同地区的发展状况
# _*_coding : utf-8 _*_
import pyecharts.options as opts
from pyecharts.charts import Line
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=line-simple
目前无法实现的功能:
暂无
"""
# x_data = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
# y_data = [820, 932, 901, 934, 1290, 1330, 1320]
#
#
# (
# Line()
# .set_global_opts(
# tooltip_opts=opts.TooltipOpts(is_show=False),
# xaxis_opts=opts.AxisOpts(type_="category"),
# yaxis_opts=opts.AxisOpts(
# type_="value",
# axistick_opts=opts.AxisTickOpts(is_show=True),
# splitline_opts=opts.SplitLineOpts(is_show=True),
# ),
# )
# .add_xaxis(xaxis_data=x_data)
# .add_yaxis(
# series_name="",
# y_axis=y_data,
# symbol="emptyCircle",
# is_symbol_show=True,
# label_opts=opts.LabelOpts(is_show=False),
# )
# .render("basic_line_chart.html")
# )
line = Line()
f = open("C:Users\Dell\Downloads\分省年度数据(1).csv",'r',encoding="gbk")
#
# for line in f:
# print(line,end="")
# f.close()
#
line_datas = f.readlines()
f.close()
for _ in range(3):
line_datas.pop(0)
# print("line_data:",line_datas)
# 得到x轴的数据
x_data_year = line_datas.pop(0).replace('\n','').split(",")
x_data_year.pop(0)
x_data_year.reverse()
# print(x_data_year)
# print(line_datas)
y_data_bj = []
y_data_sh = []
y_data_tj = []
y_data_cq = []
for line_data in line_datas:
line_data = line_data.replace("\n","").split(",")
if line_data[0] =="北京市":
line_data.pop(0)
line_data.reverse()
y_data_bj = line_data
elif line_data[0] == "上海市":
line_data.pop(0)
line_data.reverse()
y_data_sh = line_data
elif line_data[0] == "天津市":
line_data.pop(0)
line_data.reverse()
y_data_tj = line_data
elif line_data[0] == "重庆市":
line_data.pop(0)
line_data.reverse()
y_data_cq = line_data
line.add_xaxis(x_data_year)
line.add_yaxis("重庆市历年人口",y_data_cq)
line.add_yaxis("北京市历年人口",y_data_bj)
line.add_yaxis("上海市历年人口",y_data_sh)
line.add_yaxis("天津市历年人口",y_data_tj)
line.set_global_opts(title_opts=opts.TitleOpts(title="2003-2022年直辖市总人口折线图",pos_right="center",pos_bottom="1%"))
line.render("../demo/line_4city_population.html")