# 准备列表,在列表内每一个元素都是字典,将其转换为JSON
data = [{"name":"马浩楠","age":22},{"name":"浩楠","age":22}]
import json
data = json.dumps(data,ensure_ascii=False)
print(f"类型:{type(data)},内容:{data}")
# 准备字典,吧字典转换为JSON
data = {"name":"马浩楠","age":22}
data = json.dumps(data,ensure_ascii=False)
print(f"类型:{type(data)},内容是:{data}")
# 将JSON字符串转换为Python数据类型[{k:v,k:v},{k:v,k:v}]
str = '[{"name":"马浩楠","age":22},{"name":"浩楠","age":22}]'
data = json.loads(str)
print(f"类型:{type(data)},内容是:{data}")
# 将JSON字符串转换为Python数据类型{K:v,k:v}
str = '{"name":"马浩楠","age":22}'
data = json.loads(str)
print(f"类型:{type(data)},内容是:{data}")
# 导包
from pyecharts.charts import Line
# 创建一个折线图对象
line = Line()
# 给折线图对象添加 x 轴数据
line.add_xaxis(["中国","美国","英国"])
# 给折线图对象添加 y 轴数据
line.add_yaxis("GDP",[30,20,10])
# 通过render方法,将代码生成为图像
line.render()
pyecharts模块中的全局配置选项
line.set_global_opts(
# 标题
title_opts=TitleOpts(title="GDP展示",pos_left="center",pos_bottom="1%"),
# 图例
legend_opts=LegendOpts(is_show=True),
# 工具箱
toolbox_opts=ToolboxOpts(is_show=True),
# 视觉映射
visualmap_opts=VisualMapOpts(is_show=True)
)
创建折线图
# 导包
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
# 创建一个折线图对象
line = Line()
添加数据
# 给折线图对象添加 x 轴数据
line.add_xaxis(["中国","美国","英国"])
# 给折线图对象添加 y 轴数据
line.add_yaxis("GDP",[30,20,10])
.add_yaxis相关配置项
# 处理数据
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts,LabelOpts
f_us = open("./折线图数据/美国.txt","r",encoding="UTF-8")
us_data = f_us.read()
f_jp = open("./折线图数据/日本.txt","r",encoding="UTF-8")
jp_data = f_jp.read()
f_in = open("./折线图数据/印度.txt","r",encoding="UTF-8")
in_data = f_in.read()
# 去掉不合JSON规范的开头
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")
# 去掉不和JSON规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]
# JSON转Python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# 获取trend key
us_dict = us_dict['data'][0]['trend']
jp_dict = jp_dict['data'][0]['trend']
in_dict = in_dict['data'][0]['trend']
# 获取日期数据,用于x轴,取2020年(到314下标结束)
us_x_data = us_dict['updateDate'][:314]
jp_x_data = jp_dict['updateDate'][:314]
in_x_data = in_dict['updateDate'][:314]
# 获取确认数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_dict['list'][0]['data'][:314]
jp_y_data = jp_dict['list'][0]['data'][:314]
in_y_data = in_dict['list'][0]['data'][:314]
# 生成图标
line = Line()
# 添加x轴数据 x轴数据是公用的,使用一个即可
line.add_xaxis(us_x_data)
# 添加y轴数据
# ,label_opts=LabelOpts(is_show=False):不显示图中具体数字
line.add_yaxis("美国确诊人数",us_y_data,label_opts=LabelOpts(is_show=False)) # 添加美国y轴数据
line.add_yaxis("日本确诊人数",jp_y_data,label_opts=LabelOpts(is_show=False)) # 添加日本y轴数据
line.add_yaxis("印度确诊人数",in_y_data,label_opts=LabelOpts(is_show=False)) # 添加印度y轴数据
# 设置全局配置项
line.set_global_opts(
# 标题
title_opts=TitleOpts(title="美国,日本,印度三国疫情情况", pos_left="center", pos_bottom="2%"),
# 图例
legend_opts=LegendOpts(is_show=True),
# 工具箱
toolbox_opts=ToolboxOpts(is_show=True),
# 视觉映射
visualmap_opts=VisualMapOpts(is_show=True)
)
line.render()
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
# 准备地图对象
map = Map()
# 准备数据
data = [
("北京市", 99),
("上海市", 199),
("湖南省", 299),
("台湾省", 399),
("广东省", 499)
]
# 添加数据
map.add("测试地图", data, "china")
# 绘图
map.render()
# 设置全局选项
map.set_global_opts(
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
pieces=[
{"min":1, "max":9, "label":"1-9人", "color":"#CCFFFF"},
{"min":10, "max":99, "label":"10-99人", "color":"#FFFF99"},
{"min":100, "max":499, "label":"99-499人", "color":"#FF9966"},
{"min":500, "max":999, "label":"499-999人", "color":"#FF6666"},
{"min":1000, "max":9, "label":"1000-9999人", "color":"#CC3333"},
{"min":10000, "label":"10000以上", "color":"#990033"}
]
)
)
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts,TitleOpts
import json
# 读取数据文件
f = open("./地图数据/疫情.txt","r",encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()
# 取到各省数据
data = json.loads(data)
provinceData = data["areaTree"][0]["children"]
# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list = []
for i in provinceData:
data_list.append((i["name"]+"省",i["total"]["confirm"]))
# 创建地图对象
map = Map()
map.add("各省份确诊人数", data_list, "china")
# 设置全局配置,定制分段的视觉映射
map.set_global_opts(
title_opts=TitleOpts(title="全国疫情地图"),
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
pieces=[
{"min":1, "max":9, "label":"1-9人", "color":"#CCFFFF"},
{"min":100, "max":999, "label":"100-999人", "color":"#FFFF99"},
{"min":1000, "max":4999, "label":"1000-4999人", "color":"#FF9966"},
{"min":5000, "max":9999, "label":"5000-9999", "color":"#FF6666"},
{"min":10000, "max":99999, "label":"10000-99999", "color":"#CC3333"},
{"min":100000, "label":"100000以上", "color":"#990033"}
]
)
)
# 绘图
map.render()
from pyecharts.charts import Map
from pyecharts.options import *
import json
# 读取文件
f = open("./地图数据/疫情.txt","r",encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()
# 获取河南省数据
data = json.loads(data)
cityData = data["areaTree"][0]["children"][3]["children"]
cityList = []
# 准备数据为元组并放入list
for i in cityData:
cityList.append((i["name"]+"市",i["total"]["confirm"]))
print(cityList)
# 添加济源市信息
cityList.append(("济源市",5))
# 构建地图
map = Map()
map.add("河南省疫情地图",cityList,"河南")
# 设置全局选项
map.set_global_opts(
title_opts=TitleOpts(title="河南省疫情地图"),
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
pieces=[
{"min":1, "max":9, "label":"1-9人", "color":"#CCFFFF"},
{"min":10, "max":99, "label":"10-99人", "color":"#FFFF99"},
{"min":100, "max":499, "label":"100-499人", "color":"#FF9966"},
{"min":5000, "max":9999, "label":"5000-9999", "color":"#FF6666"},
{"min":10000, "max":99999, "label":"10000-99999", "color":"#CC3333"},
{"min":100000, "label":"100000以上", "color":"#990033"}
]
)
)
# 绘图
map.render("河南省疫情地图.html")
from pyecharts.charts import Bar
from pyecharts.options import *
# 构建柱状图
bar = Bar()
# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
bar.add_yaxis("GDP",[30,20,10],label_opts=LabelOpts(position="right"))
# 反转xy轴数据
bar.reversal_axis()
# 渲染视图
bar.render()
反转x和y轴
bar.reversal_axis()
数值标签在右侧
bar.add.yaxis("GDP",[30,20,10],label_opts=LabelOpts(
position="right"
))
Timeline()——时间线
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
bar1 = Bar()
bar2 = Bar()
bar3 = Bar()
# 添加x轴数据
bar1.add_xaxis(["中国","美国","英国"])
bar2.add_xaxis(["中国","美国","英国"])
bar3.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
bar1.add_yaxis("GDP",[30,20,10],label_opts=LabelOpts(position="right"))
bar2.add_yaxis("GDP",[50,40,20],label_opts=LabelOpts(position="right"))
bar3.add_yaxis("GDP",[90,70,50],label_opts=LabelOpts(position="right"))
# 反转xy轴数据
bar1.reversal_axis()
bar2.reversal_axis()
bar3.reversal_axis()
# 创建时间线对象
timeLine = Timeline(
# 设置主题
{"theme":ThemeType.LIGHT}
)
# timeLine对象添加bar柱状图
timeLine.add(bar1,"2021年GDP")
timeLine.add(bar2,"2022年GDP")
timeLine.add(bar3,"2023年GDP")
# 设置自动播放
timeLine.add_schema(
play_interval=1000, # 自动播放的时间间隔,单位毫秒
is_timeline_show=True, # 是否在自动播放的时候,显示时间戳
is_auto_play=True, # 是否自动播放
is_loop_play=True # 是否循环播放
)
# 渲染视图
timeLine.render("基础时间线柱状图.html")
# 准备列表
myList = [["a",33],["b",55],["c",11]]
# 排序,基于带名函数
def srotMethod(element):
return element[1]
myList.sort(key=srotMethod,reverse=True)
# 排序,基于匿名函数
myList.sort(key=lambda ele:ele[1],reverse=True)
print(myList)
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import *
f = open("./柱状图数据/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data = f.readlines()
# 删除第一条不需要的数据
data.pop(0)
dictData = {}
# 将数据转为字典存储,格式:{ 年份:[[国家,GDP],[国家,GDP]] }
for line in data:
year = int(line.split(",")[0]) # 年份
country = line.split(",")[1] # 国家
gdp = float(line.split(",")[2])# gdp数据
# 字典里是否存在该值,有则添加,没有则创建再添加
try:
dictData[year].append([country,gdp])
except KeyError:
dictData[year] = []
dictData[year].append([country,gdp])
# 排序拿到年的列表
sorted_year = sorted(dictData)
timeLine = Timeline({"theme":ThemeType.LIGHT})
# 循环年来通过每一年拿到数据
for year in sorted_year:
# 取前8名的国家(通过排序)
dictData[year].sort(key=lambda ele:ele[1],reverse=True)
eight_data = dictData[year][0:8]
xData = []
yData = []
# 循环前八名数据 分别吧数据放入列表中,后续通过创建 bar 来添加xy轴数据
for i in eight_data:
print(i)
xData.append(i[0])
yData.append(i[1]/100000000)
# 反转数据,数据从上至下排序显示
xData.reverse()
yData.reverse()
bar = Bar()
# 添加x轴数据
bar.add_xaxis(xData)
# 添加y轴数据
bar.add_yaxis("GDP(亿)",yData,label_opts=LabelOpts(position="right"))
bar.reversal_axis()
# 添加标题
bar.set_global_opts(
title_opts=TitleOpts(title=f"{year}年全球前8GDP数据")
)
timeLine.add(bar,str(year))
timeLine.add_schema(
play_interval=1000,
is_timeline_show=True,
is_loop_play=True,
is_auto_play=True
)
timeLine.render("动态时间柱状图.html")