课程学习来源:b站up:【蚂蚁学python】
【课程链接:【【数据可视化】Python数据图表可视化入门到实战】】
【课程资料链接:【链接】】
python:3.12.3
所有库都使用最新版。
Python绘制中国地图和城市图表
from pyecharts import options as opts
from pyecharts.charts import Map
1.绘制中国城市数据图表
# 2019全国各省人口数量排名,单位:万,展示前十province_population = [["广东省", 11169],["山东省", 10005.83],["河南省", 9559.13],["四川省", 8302],["江苏省", 8029.3],["河北省", 7519.52],["湖南省", 6860.2],["安徽省", 6254.8],["湖北省", 5902],["浙江省", 5657]
]province_population
[['广东省', 11169],['山东省', 10005.83],['河南省', 9559.13],['四川省', 8302],['江苏省', 8029.3],['河北省', 7519.52],['湖南省', 6860.2],['安徽省', 6254.8],['湖北省', 5902],['浙江省', 5657]]
map = (Map().add("各省人口数量",province_population,"china").set_global_opts(title_opts=opts.TitleOpts(title="2019全国各省人口数量排名"),visualmap_opts=opts.VisualMapOpts(max_=12000))
)
from IPython.display import HTML# 同上,读取 HTML 文件内容
# bar.render()的值是一个路径,以字符串形式表示
with open(map.render(), 'r', encoding='utf-8') as file:html_content = file.read()# 直接在 JupyterLab 中渲染 HTML
HTML(html_content)
2.绘制具体城市数据
# 2019年北京各区人口数量,前七个
beijing = [["朝阳区",395.5],["海淀区",369.4],["丰台区",232.4],["昌平区",196.3],["大兴区",156.2],["通州区",137.8],["西城区",129.8]
]
map = (Map().add("各区人口",beijing, "北京").set_global_opts(title_opts=opts.TitleOpts(title="2019年北京各区人口数量"),visualmap_opts=opts.VisualMapOpts(max_=400))
)
from IPython.display import HTML# 同上,读取 HTML 文件内容
# bar.render()的值是一个路径,以字符串形式表示
with open(map.render(), 'r', encoding='utf-8') as file:html_content = file.read()# 直接在 JupyterLab 中渲染 HTML
HTML(html_content)
本节遇到一些坑:
1.图像不显示的老问题
使用py渲染html,即使html文件已经能够产生相应的pyecharts图表,仍然可能出现jupyter lab不显示的情况,为了避免这种情况发生,我给出两点注意点:
- 先生成图像,设置一个变量名link,给link赋导出render图像hmtl文件的地址,然后再使用py渲染link链接下的html文件
- 如果使用了link还是不出图,那么就去查看导出的html文件,如果html在浏览器里面正常显示图片,那么就是py没有渲染好,把py渲染html的代码段重复执行几次,直到正常显示图片即可,一般都可以。
上述两个步骤的目的是,给pyecharts尽可能多的反应时间,避免不出图的情况发生。
代码对比:
不使用link,即不给pyecharts反应时间:————第一时间无法出图
map = (Map().add("各区人口",beijing, "北京").set_global_opts(title_opts=opts.TitleOpts(title="2019年北京各区人口数量"),visualmap_opts=opts.VisualMapOpts(max_=400))
)from IPython.display import HTML# 同上,读取 HTML 文件内容
# bar.render()的值是一个路径,以字符串形式表示
with open(map.render(), 'r', encoding='utf-8') as file:html_content = file.read()# 直接在 JupyterLab 中渲染 HTML
HTML(html_content)
使用link,即给pyecharts反应时间:————第一时间大概率出图
map = (Map().add("各区人口",beijing, "北京").set_global_opts(title_opts=opts.TitleOpts(title="2019年北京各区人口数量"),visualmap_opts=opts.VisualMapOpts(max_=400))
)link = map.render()
from IPython.display import HTML# 同上,读取 HTML 文件内容
# bar.render()的值是一个路径,以字符串形式表示
with open(link, 'r', encoding='utf-8') as file:html_content = file.read()# 直接在 JupyterLab 中渲染 HTML
HTML(html_content)
2.数据无法导入地图
由于pyecharts更新,导致地图上许多省市与之前的名称不同,例如视频中的是河北、山东,但是新更新的地图就变成了河北省、山东省。
好在虽然数据无法在地图上显示,但空白的地图是可以显示的,根据地图的上的省市描述更换数组定义即可。
有一篇博文就是讲的这个,虽然我一开始就意识到这一点,但是由于上面图像不显示的老问题让我当时以为错误不在这,然后废了好多劲才最终达到预期的效果。
附上该博文的链接:【完美解决】 Python pyecharts Map 地图数据不显示