Pyecharts Geo在地图上添加坐标点
Pyecharts Geo在地图上添加坐标点
在上一篇文章已经实现了创建一个中国地区的地图
创建地图: https://blog.csdn.net/weixin_41955254/article/details/118896870?spm=1001.2014.3001.5502
这篇文章将介绍怎么在地图上添加坐标点
添加坐标点
输入坐标点
想要给图片输入坐标点,我们必须知道坐标点是由哪几个属性组成的
| 属性名 | 属性值格式 |
|---|---|
| 坐标点名称 | 字符型(具有唯一性) |
| 坐标点经度 | 10进制数字 |
| 坐标点维度 | 10进制数字 |
提供一个好用的网站可以批量将度分秒转换成10进制的网站
https://www.opengps.cn/Map/Tools/GPSConvert.aspx
名称确定坐标点的唯一性,经纬度确定位置
在了解清楚之后我们可以用Geo的内置函数add_coordinate添加坐标点
def add_coordinate(
# 坐标地点名称
name: str,
# 经度
longitude: Numeric,
# 纬度
latitude: Numeric,
)
具体代码如下
#g是上篇文章创建的地图,默认已经配置好了,大家可以到上一篇文章里粘贴一下最后的代码再使用
g.add_coordinate("第一个坐标点",114.9175,36.3622222)
g.add_coordinate("第二个坐标点",121.7825,31.1705555)
#添加两个坐标点是为了方便后面
将坐标点添加入系列并配置系列
但是当大家运行程序后会发现地图上并没有多什么东西,因为这里添加的是坐标点,我们并没有给坐标点添加一个系列也没有给坐标点附加图形样式,所以在地图上并不会显示,但这两个点确确实实添加了上去
不慌,因为这样我们可以对这些点进行分类,还能让不同类的坐标点以不同的形式展现
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: Sequence,
# Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
# from pyecharts.globals import GeoType
# GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
type_: str = "scatter",
# 是否选中图例
is_selected: bool = True,
# 标记图形形状
symbol: Optional[str] = None,
# 标记的大小
symbol_size: Numeric = 12,
# 每个点的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
blur_size: types.Numeric = 20,
# 每个点模糊的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
point_size: types.Numeric = 20,
# 系列 label 颜色
color: Optional[str] = None,
# 是否是多段线,在画 lines 图情况下
is_polyline: bool = False,
# 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
is_large: bool = False,
# 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。默认值 0.2
trail_length: Numeric = 0.2,
# 开启绘制优化的阈值。
large_threshold: Numeric = 2000,
# 配置该系列每一帧渲染的图形数
progressive: types.Numeric = 400,
# 启用渐进式渲染的图形数量阈值,在单个系列的图形数量超过该阈值时启用渐进式渲染。
progressive_threshold: types.Numeric = 3000,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 涟漪特效配置项,参考 `series_options.EffectOpts`
effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),
# 线样式配置项,参考 `series_options.LineStyleOpts`
linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
# 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.renderItem)
render_item: types.JsCode = None,
# 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.encode)
encode: types.Union[types.JsCode, dict] = None,
)
通过add函数,为坐标点添加系列,并且添加各种属性配置
这篇文章暂时先不讲tooltip_opts里的formatter配置,这个配置很重要所以单独成立一篇文章来讲
挑了几个我常用的属性给大家介绍
g.add(series_name='系列1'
, data_pair=[("第一个坐标点",'非常的大')]#系列里需要的点用列表框住多个元组达到批量输入的效果[(坐标点1,坐标点1的值),(坐标点2,坐标点2的值),(坐标点3,坐标点3的值)]
, symbol_size=35#系列内显示点的大小
, color="black"#系列内显示点的颜色
,is_selected=True#html文件运行第一时间是否选中该系列
)
g.add(series_name='系列2'
, data_pair=[("第二个坐标点",'非常的小')]
, symbol_size=5
, color="white"
,is_selected=False
)
生成的结果如下

其实这里有个小bug,我也不知道是我的问题还是这个库的一个bug
当添加多个系列的时候,颜色配置会出现紊乱
紊乱的顺序刚好和你配置的顺序倒过来,比如你配置的时候是红橙黄绿蓝,那么最后呈现的颜色就会是蓝绿黄橙红,这一点大家还是要注意一下的
最后生成的这个图说实在的,丑了点,现在给他美化一下
加一点点小细节给图片美化一下
我们不难跳出这个图的一些毛病
1、坐标点上有一行长长的数字
2、最上边图例和坐标点的位置重叠了
3、图例选中之后颜色与背景不匹配
上述三点,我们需要调节全局配置项和系列配置项
官网里面有一张示意图很重要,建议大家可以保存下来

这两个配置项里面有很多的配置项,这里很难一一讲解,只能说,需要改变某一项的属性,我们首先先去查官网,接下来我将解决我上面提出的三个毛病
让坐标点不显示value
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
调整图例位置,向右靠拢
g.set_global_opts(legend_opts=opts.LegendOpts(pos_right="10px"))
改变图例选中与非选中时候的颜色色系
g.set_global_opts(legend_opts=opts.LegendOpts(
inactive_color="white",
textstyle_opts=opts.TextStyleOpts(color="orange")
))
inactive_color:系列未被选中时的颜色
系列颜色被选中时全局配置项里有一个文本配置项,我们需要用到pyecharts.optinons里的TextStyleOpts函数对文本颜色进行配置
最后生成的结果如下:

奉上完整代码:
import webbrowser
from pyecharts import options as opts
from pyecharts.charts import Geo
g = (Geo(
init_opts=opts.InitOpts(width="900px",height="900px",page_title="12345",bg_color="#404a59")#颜色是str的16进制或英文都可以
).add_schema(
maptype="china",#地图类型
itemstyle_opts=opts.ItemStyleOpts(
color="#323c48"#背景颜色
, border_color="white")#边界线颜色
))
g.add_coordinate("第一个坐标点",114.9175,36.3622222)
g.add_coordinate("第二个坐标点",121.7825,31.1705555)
g.add(series_name='系列1'#系列名
, data_pair=[("第一个坐标点",'非常的大')]#系列里需要的点用列表框住多个元组达到批量输入的效果[(坐标点1,坐标点1的值),(坐标点2,坐标点2的值),(坐标点3,坐标点3的值)]
, symbol_size=35#系列内显示点的大小
, color="black"
,is_selected=True
)
g.add(series_name='系列2'
, data_pair=[("第二个坐标点",'非常的小')]
, symbol_size=5
, color="white"
,is_selected=False
)
g.set_series_opts(
label_opts=opts.LabelOpts(
is_show=False
))
g.set_global_opts(
title_opts=opts.TitleOpts(
title='12345678767545323',#主标题内容
subtitle='324567876564534',#副标题内容
item_gap=15,#主副标题的间距
title_textstyle_opts=opts.TextStyleOpts(
color="white",#主标题颜色
font_weight="bolder",#主标题加粗
font_size=40#主标题字体大小
),
subtitle_textstyle_opts=opts.TextStyleOpts(
color='gray',#副标题颜色
font_weight="bolder",#副标题加粗
font_size=15))#副标题副标题字体大小
,legend_opts=opts.LegendOpts(pos_right="10px",inactive_color="white",textstyle_opts=opts.TextStyleOpts(color="orange"))
)
result=g.render()#会在你py文件同目录下生成一个html文件,也可在括号内输入保存路径,用浏览器打开html文件可以查看
webbrowser.open(result)
webbrowser是我觉得非常好用的一个模块,程序运行完自动打开html,推荐给大家
这是小弟学习pyecharts的第二篇笔记,不足之处还请各位大佬多多指点!!!
下一期文章: 如何更改坐标点提示框的文字格式,达到换行空行的效果