文章目录
一、python图表开发
1.简单GDP折线图(无文本数据)
代码如下(示例):
"""
pyecharts折线图基础入门
"""
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, 30, 10])
# 设置全局配置项
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) # 视觉映射
)
# 通过render(),生成图像
line.render()
2.疫情确诊人数折线图(有文本数据)
代码如下(示例):
"""
对json数据进行处理并显示折线图
可以使用json在线编辑器看JSON结构 https://www.89tool.com/
"""
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts
# 导入文件
f_us = open("C:/partF/programs/test/折线图数据/美国.txt", "r", encoding="UTF-8")
f_jp = open("C:/partF/programs/test/折线图数据/日本.txt", "r", encoding="UTF-8")
f_in = open("C:/partF/programs/test/折线图数据/印度.txt", "r", encoding="UTF-8")
# 获取文本
us_data = f_us.read()
jp_data = f_jp.read()
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]
# print(f"类型:{type(us_data)}")
# print(f"{us_data}")
# str转字典(键值对)
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# 获取JSON中的确诊数据和对应的日期信息
us_trend_data = us_dict["data"][0]["trend"]
jp_trend_data = jp_dict["data"][0]["trend"]
in_trend_data = in_dict["data"][0]["trend"]
# 截取314条日期信息作为x轴(有一条其实就行,是公用的x轴)
us_x_data = us_trend_data["updateDate"][:314]
jp_x_data = jp_trend_data["updateDate"][:314]
in_x_data = in_trend_data["updateDate"][:314]
# 截取314条确诊数据作为y轴
us_y_data = us_trend_data["list"][0]["data"][:314]
jp_y_data = jp_trend_data["list"][0]["data"][:314]
in_y_data = in_trend_data["list"][0]["data"][:314]
# 构建图标
line = Line()
line.add_xaxis(us_x_data)
line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False))
# 设置全局选项
line.set_global_opts(
title_opts=TitleOpts(title="2020美日印三国确诊人数对比折线图", pos_left="center", pos_bottom="1%")
)
line.render()
# 关闭文件
f_us.close()
f_jp.close()
f_in.close()
3.疫情确诊人数地图(有文本数据)
"""
全国疫情可视化地图开发
"""
import json
from pyecharts.charts import Map
from pyecharts.options import *
f = open("C:/partF/programs/test/地图数据/疫情.txt", "r", encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()
# json转换成数据字典
data_dict = json.loads(data)
# 从字典中取中国各区的数据
data_province = data_dict["areaTree"][0]["children"]
# 列表记录 各区的区名和确诊人数,给map使用
data_list = []
# 循环取出各区的区名和确诊人数
for province in data_province:
province_name = province["name"]+"省"
province_confirm = province["total"]["confirm"]
data_list.append((province_name, province_confirm)) # 省名和确诊人数作为元组传进去
print(f"{data_list}")
# 构建map对象
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": 99, "lable":"1-99人", "color": "#CCFFFF"},
{"min": 100, "max": 999, "lable": "100-999人", "color": "#FFFF99"},
{"min": 1000, "max": 4999, "lable": "1000-4999人", "color": "#FF9966"},
{"min": 5000, "max": 9999, "lable": "5000-9999人", "color": "#FF6666"},
{"min": 10000, "max": 99999, "lable": "10000-99999人", "color": "#CC3333"},
{"min": 100000, "lable": "100000+", "color": "#990033"},
]
)
)
# 绘图渲染
map.render("全国疫情地图.html")
4.简单时间线GDP柱状图(无文本数据)
"""
带有时间线的柱状图开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts
from pyecharts.globals import ThemeType
# 构建柱状图
bar1 = Bar()
bar1.add_xaxis(["中国", "美国", "英国"])
bar1.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right")) # 数据显示在柱状条的右侧
bar1.reversal_axis() # x y轴翻转
bar2 = Bar()
bar2.add_xaxis(["中国", "美国", "英国"])
bar2.add_yaxis("GDP", [50, 50, 50], label_opts=LabelOpts(position="right"))
bar2.reversal_axis()
bar3 = Bar()
bar3.add_xaxis(["中国", "美国", "英国"])
bar3.add_yaxis("GDP", [70, 60, 60], label_opts=LabelOpts(position="right"))
bar3.reversal_axis()
# 构建时间线,主题设置
timeline = Timeline({"theme": ThemeType.LIGHT})
# 在时间线中添加柱状图对象
timeline.add(bar1, "点1")
timeline.add(bar2, "点1")
timeline.add(bar3, "点1")
# 用时间线绘图,而不是Bar柱状图绘图
timeline.render("基础时间线柱状图.html")
# 设置自动播放
timeline.add_schema(
play_interval=1000,
is_timeline_show=True,
is_auto_play=True,
is_loop_play=True
)
5.国家GDP动态柱状图(无文本数据)
"""
GDP大量数据动态柱状图开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts, TitleOpts
from pyecharts.globals import ThemeType
# ---------------------准备、处理数据-------------------
# 读取文件
f = open("C:/partF/programs/test/动态柱状图数据/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines() # list格式
# print(f"{type(data_lines)}")
# print(f"{data_lines}")
# 关闭文件
f.close()
# 删除第一行
data_lines.pop(0)
# 定义一个字典格式化存储这些数据
# {1960:[[美国,123],[中国,321],...], 1961:[[美国,123],[中国,321],...]}
data_dict = {}
for line in data_lines:
year = int(line.split(",")[0])
country = line.split(",")[1]
gdp = float(line.split(",")[2])
try:
# data_dict一开始是空的,data_dict[1960]不存在,若存在,则添加二维的列表
data_dict[year].append([country, gdp])
except KeyError:
data_dict[year] = []
data_dict[year].append([country, gdp])
# 打印字典全部数据
# print(data_dict)
# 因为字典无序,年份无序,需要先排序
sorted_year_list = sorted(data_dict.keys())
print(f"{sorted_year_list}")
# ---------------------准备、处理数据完成-------------------
# ------遍历数据并创建动态图表(时间线保存每次遍历新建的图表)-------
# 创建时间线对象,保存下面遍历的每一个柱状图Bar,并添加颜色主题
timeline = Timeline({"theme": ThemeType.LIGHT})
# 遍历创建Bar柱状图
for year in sorted_year_list:
data_dict[year].sort(key=lambda element: element[1], reverse=True)
# 取出本年分前8的国家
country_list = data_dict[year][:8]
x_data = []
y_data = []
for country_info in country_list:
x_data.append(country_info[0]) # x轴添加国家数据
y_data.append(country_info[1]/100000000) # y轴添加gdp数据
# 构建柱状图
bar = Bar()
x_data.reverse() # 翻转x y 的目的是让数据高的显示在上面
y_data.reverse()
bar.add_xaxis(x_data)
bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
# 翻转x y轴
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_auto_play=True,
is_loop_play=True
)
# 绘图渲染
timeline.render("1960-2019全球GDP前8国家.html")
总结
提示:
例如: