请问如何在pyecharts作地图时展示更多文字信息?
最近作图遇到了一个问题:
我想在滑动生成的标签下面添加文字,比如把河北省每个市包含的几所学校名字列在标签下面。
使得鼠标滑过时,即可展示全部信息
这是我的代码:
# 需要引用的库
from pyecharts import options as opts
from pyecharts.charts import Map
school = (
('石家庄市', 9),
('唐山市', 5),
('秦皇岛市', 2),
('邯郸市', 8),
('邢台市', 10),
('保定市', 23),
('张家口市', 3),
('承德市', 1),
('沧州市', 12),
('廊坊市', 2),
('衡水市', 12)
)
# 生成省份地图
def create_province_map():
( # 大小设置
Map()
.add(
series_name="学校数量",
data_pair=school,
maptype="河北",)
# 全局配置项
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="河北省优秀生源基地分布图"),
# 设置标准显示
visualmap_opts=opts.VisualMapOpts(max_=30, is_piecewise=True, split_number=3),)
# 系列配置项
.set_series_opts(
# 标签名称显示,默认为True
label_opts=opts.LabelOpts(is_show=True, color="blue"))
# 生成本地html文件
.render("河北省优秀生源基地分布图.html")
)
create_province_map()
我想把如下这些数据也体现在图上,不知道该怎么实现:
DataList = [
('石家庄市', ['正定中学','河北辛集中学','新乐一中','石家庄第二中学','河北正中实验中学','河北辛集第一中学','石家庄精英中学','石家庄二十四中','藁城区第一中学']),
('唐山市', ['河北乐亭中学','唐山市丰南区第一中学','唐山市第二中学','唐山市第一中学','迁安市第一中学']),
('秦皇岛市', ['秦皇岛一中', '秦皇岛昌黎一中']),
('邯郸市', ['曲周县第一中学', '邯郸市第四中学', '邯郸武安第一中学', '邯郸涉县一中', '邯郸市第一中学', '魏县第一中学', '邯郸市第三中学(河北邯郸外国语学校)', '邯郸市永年区第一中学']),
('邢台市', ['邢台市第一中学', '南宫中学', '邢台市第二中学', '河北内丘中学', '河北巨鹿中学', '临城中学', '沙河市第一中学', '邢台清河中学', '河北隆尧第一中学', '河北宁晋中学']),
('保定市', ['保定市第一中学', '保定市第二中学' ,'保定市第三中学', '徐水综合高级中学', '满城中学', '清苑中学', '易县中学', '望都中学', '博野中学', '定兴县第三中学', '定兴中学', '高碑店一中',
'河北安国中学', '河北定州中学', '保定唐县一中', '雄县中学', '河北安新中学', '河北省曲阳县第一高级中学', '河北祖冲之中学', '定州市第二中学', '保定市徐水区第一中学', '河北高阳中学', '河北阜平中学']),
('张家口市', ['张家口宣化一中', '张家口市第一中学', '张家口赤城中学']),
('承德市', ['丰宁满族自治县第一中学']),
('沧州市', ['任丘市第一中学','沧州市第一中学','南皮县第一中学','颐和中学','河北省献县第一中学','沧县中学','沧州二中', '沧州海兴中学', '泊头一中', '河间一中', '黄骅市中学', '河北省肃宁县第一中学']),
('廊坊市',['廊坊三河一中', '廊坊大成一中']),
('衡水市', ['衡水中学', '安平中学', '武强中学', '武邑中学', '衡水二中', '衡水市第十三中学', '衡水市深州中学', '衡水市枣强中学', '河北冀州中学','河北郑口中学','河北景县中学','衡水市第十四中学']),
]
最好能把我的需求整合起来,直接给我一段能跑起来的代码,谢谢๑•́₃•̀๑
鼠标放上去显示该市下面所有的学校名称,解决方法就是,将DataList数据放到html的js中,通过 opts.TooltipOpts设置鼠标停留显示学校名称,全部代码如下:
# 需要引用的库
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.commons.utils import JsCode
import json
# 设置河北省优秀生源基地学校所存在的相关城市,并设置学校数量
school = [
('石家庄市', 9),
('唐山市', 5),
('秦皇岛市', 2),
('邯郸市', 8),
('邢台市', 10),
('保定市', 23),
('张家口市', 3),
('承德市', 1),
('沧州市', 12),
('廊坊市', 2),
('衡水市', 12)
]
# 设置每个城市中的学校名称
DataList = [
('石家庄市', ['正定中学', '河北辛集中学', '新乐一中', '石家庄第二中学', '河北正中实验中学', '河北辛集第一中学', '石家庄精英中学', '石家庄二十四中', '藁城区第一中学']),
('唐山市', ['河北乐亭中学', '唐山市丰南区第一中学', '唐山市第二中学', '唐山市第一中学', '迁安市第一中学']),
('秦皇岛市', ['秦皇岛一中', '秦皇岛昌黎一中']),
('邯郸市', ['曲周县第一中学', '邯郸市第四中学', '邯郸武安第一中学', '邯郸涉县一中', '邯郸市第一中学', '魏县第一中学', '邯郸市第三中学(河北邯郸外国语学校)', '邯郸市永年区第一中学']),
('邢台市', ['邢台市第一中学', '南宫中学', '邢台市第二中学', '河北内丘中学', '河北巨鹿中学', '临城中学', '沙河市第一中学', '邢台清河中学', '河北隆尧第一中学', '河北宁晋中学']),
('保定市',
['保定市第一中学', '保定市第二中学', '保定市第三中学', '徐水综合高级中学', '满城中学', '清苑中学', '易县中学', '望都中学', '博野中学', '定兴县第三中学', '定兴中学',
'高碑店一中',
'河北安国中学', '河北定州中学', '保定唐县一中', '雄县中学', '河北安新中学', '河北省曲阳县第一高级中学', '河北祖冲之中学', '定州市第二中学', '保定市徐水区第一中学', '河北高阳中学',
'河北阜平中学']),
('张家口市', ['张家口宣化一中', '张家口市第一中学', '张家口赤城中学']),
('承德市', ['丰宁满族自治县第一中学']),
(
'沧州市', ['任丘市第一中学', '沧州市第一中学', '南皮县第一中学', '颐和中学', '河北省献县第一中学', '沧县中学', '沧州二中', '沧州海兴中学', '泊头一中', '河间一中', '黄骅市中学',
'河北省肃宁县第一中学']),
('廊坊市', ['廊坊三河一中', '廊坊大成一中']),
('衡水市', ['衡水中学', '安平中学', '武强中学', '武邑中学', '衡水二中', '衡水市第十三中学', '衡水市深州中学', '衡水市枣强中学', '河北冀州中学', '河北郑口中学', '河北景县中学',
'衡水市第十四中学']),
]
DataList = str(DataList)
# 生成省份地图
def create_province_map():
tooltip_opts = opts.TooltipOpts(is_show=True,trigger='item', trigger_on='mousemove|click',formatter= JsCode(
'''
function showSchool(params){
DataList='''+DataList+';'
'''
var tips = params['name']+params['value']+'所'+':'+'<br>';
for(var i =0;i<DataList[params['dataIndex']].length;i++){
tips = tips+DataList[params['dataIndex']][i]+'<br>';
}
return tips;
}
'''
))
# 自定义Label
label_opts = opts.LabelOpts(
is_show=True,
color="blue",
font_size=12,
position="bottom",
interval=0,
rotate=0
)
( # 大小设置
Map()
.add(
series_name="学校数量",
data_pair=school,
maptype="河北",
label_opts=label_opts # 添加自定义Label
)
# 全局配置项
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="河北省优秀生源基地分布图"),
# 设置标准显示
visualmap_opts=opts.VisualMapOpts(max_=30, is_piecewise=True, split_number=3),
tooltip_opts = tooltip_opts # 添加自定义Label
)
# 生成本地html文件
.render("河北省优秀生源基地分布图.html")
)
create_province_map()
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
要在pyecharts中展示更多的文字信息,一种方法是使用tooltip
配置项,并在其中添加需要显示的文本信息。
在您的代码中,可以通过以下步骤实现:
将DataList
中的数据转换为字典形式,其中键为城市名称,值为包含学校名称的列表。
在Map
的add
方法中,将数据改为字典形式,并添加tooltip
配置项。tooltip
配置项中的formatter
选项可以设置展示的文本内容,可以使用{a}
、{b}
、{c}
等占位符来引用不同的数据项。在这里,我们需要引用城市名称和学校名称两个数据项,因此可以使用{b}
和{d}
占位符。
下面是代码示例:
from pyecharts import options as opts
from pyecharts.charts import Map
# 将DataList中的数据转换为字典形式
data_dict = {}
for city, schools in DataList:
data_dict[city] = schools
# 生成省份地图
def create_province_map():
(
Map()
.add(
series_name="学校数量",
data_pair=list(data_dict.items()),
maptype="河北",
tooltip_opts=opts.TooltipOpts(
formatter="{b}: {c}<br />{d}"
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="河北省优秀生源基地分布图"),
visualmap_opts=opts.VisualMapOpts(max_=30, is_piecewise=True, split_number=3),
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True, color="blue")
)
.render("河北省优秀生源基地分布图.html")
)
create_province_map()
在上述代码中,tooltip_opts
中的formatter
选项设置为"{b}: {c}<br />{d}"
,其中{b}
代表城市名称,{c}
代表学校数量,{d}
代表学校名称。在这个占位符中,<br />
表示换行符。
这样,当鼠标悬停在地图上的某个区域时,就会显示该区域的城市名称、学校数量和学校名称等信息。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
引用chatGPT作答,您可以使用 tooltip_opts 参数在鼠标悬停时显示更多信息。为此,您需要将城市名称与学校名称连接到一起,并将其作为数据对传递给图表。下面是修改后的代码:
from pyecharts import options as opts
from pyecharts.charts import Map
# 设置河北省优秀生源基地学校所存在的相关城市,并设置学校数量
schools = [
("石家庄市", 9),
("唐山市", 5),
("秦皇岛市", 2),
("邯郸市", 8),
("邢台市", 10),
("保定市", 23),
("张家口市", 3),
("承德市", 1),
("沧州市", 12),
("廊坊市", 2),
("衡水市", 12)
]
# 设置每个城市对应的学校列表
school_details = [
("石家庄市", ['正定中学','河北辛集中学','新乐一中','石家庄第二中学','河北正中实验中学','河北辛集第一中学','石家庄精英中学','石家庄二十四中','藁城区第一中学']),
("唐山市", ['河北乐亭中学','唐山市丰南区第一中学','唐山市第二中学','唐山市第一中学','迁安市第一中学']),
("秦皇岛市", ['秦皇岛一中', '秦皇岛昌黎一中']),
("邯郸市", ['曲周县第一中学', '邯郸市第四中学', '邯郸武安第一中学', '邯郸涉县一中', '邯郸市第一中学', '魏县第一中学', '邯郸市第三中学(河北邯郸外国语学校)', '邯郸市永年区第一中学']),
("邢台市", ['邢台市第一中学', '南宫中学', '邢台市第二中学', '河北内丘中学', '河北巨鹿中学', '临城中学', '沙河市第一中学', '邢台清河中学', '河北隆尧第一中学', '河北宁晋中学']),
("保定市", ['保定市第一中学', '保定市第二中学' ,'保定市第三中学', '徐水综合高级中学', '满城中学', '清苑中学', '易县中学', '望都中学', '博野中学', '定兴县第三中学', '定兴中学', '高碑店一中',
'('张家口市', ['张家口市第一中学', '张家口市第二中学', '张家口市第三中学']),
("承德市", ['承德市第一中学']),
("沧州市", ['沧州市第一中学', '沧州市第二中学', '泊头市第一中学', '青县第一中学', '河间市第一中学', '任丘市第一中学', '黄骅市第一中学', '孟村回族自治县第一中学', '东光县第一中学', '沧县第一中学', '海兴县第一中学']),
("廊坊市", ['廊坊市第一中学', '廊坊市第二中学']),
("衡水市", ['衡水市第一中学', '衡水中学', '衡水市第三中学', '深州市第一中学', '枣强中学', '阜城县第一中学', '故城县第一中学', '安平县第一中学', '景县第一中学', '武强县第一中学', '武邑中学'])
]
绘制地图
m = (
Map()
.add("河北省优秀生源基地学校", schools, "河北")
.set_global_opts(
title_opts=opts.TitleOpts(title="河北省优秀生源基地学校分布图"),
visualmap_opts=opts.VisualMapOpts(max_=23, is_piecewise=True)
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
打印学校详细信息
for city, schools in school_details:
print(f"{city}有以下优秀生源基地学校:")
for school in schools:
print(school)
展示地图
m.render("hebei_schools_map.html")
那么此处我们需要用到item的点击事件了
def on_listWidget_clicked(self, index):
on_listWidget_clicked点击响应事件的设计,当我们每点击一次就会触发执行一次on_listWidget_clicked中的方法,那么可以将查询状态的方法放到这里来
row = self.listWidget.currentRow()
wig = self.listWidget.item(row)
pwig = self.listWidget.itemWidget(wig)
sw = pwig.findChildren(SwitchButton)[0] # 根据对象类型查找,获取开关状态
userinfo['Exchange'][row]['Enable'] = sw.state # 获取选中的item中开关的状态并读入用户状态信息中存储起来
SaveJson(userinfo, user[0]['info']) # 保存修改存储到文件中