一、问题引入
pyecharts官网:https://pyecharts.org/#/zh-cn/intro
在使用Geo或者GeoLines绘制动态轨迹图时,如果所选地区是中国的省份或者城市,是能够匹配到对应的经纬度并且正常绘制的;如果所选地区涉及到其他国家或者国外城市,则因无法匹配到对应的经纬度而绘制失败:ValueError(“No coordinate is specified for {}”.format(name)),pyecharts存储经纬度的文件在:“python根目录\Lib\site-packages\pyecharts\datasets\city_coordinates.json”(查看之后可以发现,存储的经纬度只有中国的城市),本文采取自定义经纬度的方式来解决这个问题,但pyecharts的v0.5.X和v1.X是互不兼容的,自定义经纬度的方式对比结果如下。
二、pyecharts=0.5.X
python程序:
from pyecharts import GeoLines # pyecharts = 0.5.11
geolines = GeoLines(width='1500px', height='600px', title='社会主义国家', title_pos='center')
geolines.add_coordinate('中国', 104.195397, 35.86166)
geolines.add_coordinate('朝鲜', 127.510093, 40.339852)
geolines.add_coordinate('越南', 108.277199, 14.058324)
geolines.add_coordinate('老挝', 102.495496, 19.85627)
geolines.add_coordinate('古巴', -77.781167, 21.521757)
data = [['中国', '朝鲜'], ['朝鲜', '越南'], ['越南', '老挝'], ['老挝', '古巴'], ['古巴', '中国']]
geolines.add('', data=data, maptype='world', coordinate_region='world', symbol_size=0, label_color='blue', geo_normal_color='#fffdf5',
geo_emphasis_color='yellow', is_label_show=True, label_text_color='black', legend_orient='bold', label_text_size=14, label_formatter='{b}',
geo_effect_symbol='plane', geo_effect_symbolsize=28, geo_effect_color='blue', line_color='blue', line_curve=0.2, is_toolbox_show=False)
geolines.render('社会主义国家.html')
输出结果如下:
三、pyecharts=1.X
python程序:
from pyecharts.charts import Geo # pyecharts = 1.7.1
from pyecharts.globals import ChartType
from pyecharts import options as opts
geo = Geo(init_opts=opts.InitOpts(width='1500px', height='600px'))
geo.add_coordinate('中国', 104.195397, 35.86166)
geo.add_coordinate('朝鲜', 127.510093, 40.339852)
geo.add_coordinate('越南', 108.277199, 14.058324)
geo.add_coordinate('老挝', 102.495496, 19.85627)
geo.add_coordinate('古巴', -77.781167, 21.521757)
nodes = [['中国', 1], ['朝鲜', 1], ['越南', 1], ['老挝', 1], ['古巴', 1]]
data = [['中国', '朝鲜'], ['朝鲜', '越南'], ['越南', '老挝'], ['老挝', '古巴'], ['古巴', '中国']]
SYMBOL = {
"plane": "path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208."
"063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0."
"305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221."
"799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0."
"531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134"
".449-92.931l12.238-241.308L1705.06,1318.313z"
} # 原本是打算通过导入from pyecharts.globals import SymbolType的方式来绘制飞机的,但SymbolType只有ARROW、ROUND_RECT、RECT、DIAMOND、TRIANGLE这几种形状,因此只好通过自定义的SYMBOL来绘制飞机
geo.set_global_opts(title_opts=opts.TitleOpts(title='社会主义国家', pos_top='top', pos_left='center'))
geo.add_schema(maptype='world', itemstyle_opts=opts.ItemStyleOpts(color='#fffdf5'), label_opts=opts.LabelOpts(is_show=False))
geo.add('', data_pair=nodes, type_=ChartType.SCATTER, symbol_size=1,
label_opts=opts.LabelOpts(is_show=True, color='black', font_size=14, font_weight='bold', formatter='{b}'))
geo.add('', data_pair=data, type_=ChartType.LINES, symbol_size=0,
effect_opts=opts.EffectOpts(symbol=SYMBOL['plane'], symbol_size=28, color='red', trail_length=0),
linestyle_opts=opts.LineStyleOpts(curve=0.2), label_opts=opts.LabelOpts(is_show=False))
geo.render('社会主义国家.html')
输出结果如下:
四、世界国家和地区经纬度
世界国家和地区经纬度.txt:
https://url86.ctfile.com/f/32005086-1242343363-d2d0c3?p=5422
访问密码:5422
也可在以下推文查找:
https://blog.csdn.net/lin5165352/article/details/88019525