作者:作者小dull鸟
大家周末好啊,今天给大家带来一篇3D个人足迹图制作教程
下面给大家详细介绍一下制作步骤:
一、准备足迹城市数据
因为本次用pyecharts画3D足迹图的数据接口是列表形式:
所以我们要把城市的经纬度信息找出来,如果城市比较少可以手动搜索填写,如果城市比较多的话可以做个小爬虫程序,这里给大家推荐1个数据接口
https://apis.map.qq.com/jsapi?qt=geoc&addr=城市名字&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi
https://apis.map.qq.com/jsapi?qt=geoc&addr=城市名字&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi
返回数据如下:
我们可以先把足迹城市放入csv表格中:
import requests
import csv
import json
city_points=[]
with open('足迹城市.csv','r') as f:
city=csv.reader(f)
for i in city:
city_point = []
for j in i:
url='https://apis.map.qq.com/jsapi?qt=geoc&addr={0}' \
'&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi'.format(j)
response=requests.get(url)
text=json.loads(response.text)
city_point.append([text['detail']['pointx'],text['detail']['pointy']])
city_points.append(city_point)
import requests
import csv
import json
city_points=[]
with open('足迹城市.csv','r') as f:
city=csv.reader(f)
for i in city:
city_point = []
for j in i:
url='https://apis.map.qq.com/jsapi?qt=geoc&addr={0}' \
'&key=UGMBZ-CINWR-DDRW5-W52AK-D3ENK-ZEBRC&output=jsonp&pf=jsapi&ref=jsapi'.format(j)
response=requests.get(url)
text=json.loads(response.text)
city_point.append([text['detail']['pointx'],text['detail']['pointy']])
city_points.append(city_point)
可以返回足迹城市的经纬度数据,直接用于该3D足迹图数据接口
二.画3D足迹图
画足迹图代码如下:
c = (
Map3D()
.add_schema(
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(72,61,139)", #地图背景颜色
opacity=100, #图形透明度
border_width=0.8, #边界宽度
border_color="rgb(80,100,0,0)",#边界颜色
),
map3d_label=opts.Map3DLabelOpts(
is_show=True, #显示各省名字
text_style=opts.TextStyleOpts(
color=" #DC143C", font_size=9, background_color="rgba(75,0,130,0)"
),
),
light_opts=opts.Map3DLightOpts(
main_color="#fff", #主光源的颜色
main_intensity=1.2, #主光源的强度
is_main_shadow=True, #是否投射阴影
main_alpha=55, #主光源上下旋转角度
main_beta=10, #主光源左右旋转角度
ambient_intensity=0.3, #环境光的强度
),
)
.add(
series_name="",
data_pair=city_data, #足迹城市经纬度数据
type_=ChartType.LINES3D, #地图类型
effect=opts.Lines3DEffectOpts( #轨迹特效设置
is_show=True,
period=8, #尾迹特效的周期
trail_width=8, #尾迹特效的宽度
trail_length=1, #尾迹特效的长度
trail_color="#DC143C", #尾迹特效的颜色
trail_opacity=1, #尾迹特效的不透明度
constant_speed=8
),
linestyle_opts=opts.LineStyleOpts(is_show=True, color="#3CB371", opacity=0.5), #轨迹特效实线设置,设置透明度opacity为0.5
)
.set_global_opts(title_opts=opts.TitleOpts(title="3D足迹城市图"))
)
c.render_notebook()
c = (
Map3D()
.add_schema(
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(72,61,139)", #地图背景颜色
opacity=100, #图形透明度
border_width=0.8, #边界宽度
border_color="rgb(80,100,0,0)",#边界颜色
),
map3d_label=opts.Map3DLabelOpts(
is_show=True, #显示各省名字
text_style=opts.TextStyleOpts(
color=" #DC143C", font_size=9, background_color="rgba(75,0,130,0)"
),
),
light_opts=opts.Map3DLightOpts(
main_color="#fff", #主光源的颜色
main_intensity=1.2, #主光源的强度
is_main_shadow=True, #是否投射阴影
main_alpha=55, #主光源上下旋转角度
main_beta=10, #主光源左右旋转角度
ambient_intensity=0.3, #环境光的强度
),
)
.add(
series_name="",
data_pair=city_data, #足迹城市经纬度数据
type_=ChartType.LINES3D, #地图类型
effect=opts.Lines3DEffectOpts( #轨迹特效设置
is_show=True,
period=8, #尾迹特效的周期
trail_width=8, #尾迹特效的宽度
trail_length=1, #尾迹特效的长度
trail_color="#DC143C", #尾迹特效的颜色
trail_opacity=1, #尾迹特效的不透明度
constant_speed=8
),
linestyle_opts=opts.LineStyleOpts(is_show=True, color="#3CB371", opacity=0.5), #轨迹特效实线设置,设置透明度opacity为0.5
)
.set_global_opts(title_opts=opts.TitleOpts(title="3D足迹城市图"))
)
c.render_notebook()
根据读者朋友要求,我把画图过程中的注释都加上了,方便理解,大家可以根据自己的爱好调整图形效果。