Python – 数据可视化
简介
本篇使用了 ECharts 图表和 Python 制作各种图表
可以先到 https://gallery.pyecharts.org/#/README 查看各种图表的介绍和使用
数据折线图
基础折线图使用了 ECharts 中的 Line
通过读取文件数据,获得图表数据,并设置到Line中
# 打开文件,并读取数,其中code 只是为了替换数据中不需要的字符
def get_data(file_name, code):
file = open(file_name, "r", encoding="UTF-8")
file_data = file.read()
file_data = file_data.replace(code, "")
file_data = file_data[:-2] # 倒找文本,从倒数第二个数据开始找
date_data = json.loads(file_data)["data"][0]["trend"] # 获取日期数据
# 获取日期数据,并切片数据 从 0 ~ 314 个数据出来
updateDate = date_data["updateDate"][:314]
# 获取对应的确诊数据,并切片数据 从 0 ~ 314 个数据出来
listData = date_data["list"][0]["data"][:314]
file.close()
return updateDate, listData
折线图定义
# 生成一个折线图表
line = Line()
# 设置日期作为X座标
line.add_xaxis(us_date)
# 设置每个日期的数据作为Y座标
line.add_yaxis("美国", us_list_data, label_opts=LabelOpts(is_show=False)) # label_opts不显示数据数值
line.add_yaxis("日本", jp_list_data, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度", in_list_data, label_opts=LabelOpts(is_show=False))
# 配置全局配置项
line.set_global_opts(
title_opts=TitleOpts(title="三国疫情图", pos_left="center", pos_bottom="1%"),
toolbox_opts=ToolboxOpts(is_show=True)
)
# 渲染图表
line.render()
数据地图
地图数据使用 Map 图作为实现
实现原理如下:
- 通过读取文件获取每个省份的数据,通常的省份数据同使用元组tuple("省名称" , 数值)来表示
- 创建 Map 地图图表,设置地图国家为 china,默认不写也可以
- 设置热力图,在set_global_opts的visualmap_opts中设置数量的区间显示颜色和标题
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts, TitleOpts
def get_data(file_name):
file = open(file_name, 'r', encoding="UTF-8")
data = file.read()
json_data = json.loads(data)
file.close()
province_data_list = json_data["areaTree"][0]["children"]
data_list = list()
for province_data in province_data_list:
province_name = province_data["name"] + "省" # 省份名称
province_confirm = province_data["total"]["confirm"] # 确诊人数
data_list.append((province_name, province_confirm))
print(data_list)
return data_list
map = Map()
# 标题,使用元组组合的各省数据,设置国家
map.add("各省确诊人数", get_data("疫情.txt"), maptype="china")
map.set_global_opts(
title_opts=TitleOpts(title="全国疫情地图"),
visualmap_opts=VisualMapOpts(
is_show=True, # 是否显示
is_piecewise=True, # 是否分段
pieces=[
{"min": 1, "max": 99, "label": "1~99人", "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": "1~99人", "color": "#CC3333"},
{"min": 100000, "label": "10万人以上", "color": "#990033"},
] # 自定义的分段的数据
)
)
map.render("全国疫情地图.html", title="全国疫情地图Title")
动态柱状图
本例动态柱状图使用了多个柱状图,采用时间线组件包裹柱状图实现不同年份显示不同的柱状图,每个柱状图包含前8个GDP的国家的数据
from pyecharts.charts import Bar
from pyecharts.charts import Timeline
from pyecharts.options import TitleOpts, LabelOpts
from pyecharts.globals import ThemeType
def get_data(file_name):
file = open(file_name, 'r', encoding="GB2312")
data = file.readlines()
data.pop(0)
data_dict = dict()
for line in data:
line_data = line.split(",")
years = int(line_data[0]) # 年份
country = line_data[1] # 国家名
count = float(line_data[2]) # GDP数据
try:
data_dict[years].append([country, count])
except KeyError:
data_dict[years] = list()
data_dict[years].append([country, count])
timeline = Timeline({"theme": ThemeType.LIGHT})
for year in data_dict.keys():
data_dict[year].sort(key=lambda element: element[1], reverse=True)
year_data = data_dict[year][:8] # 切片拿出前8位数据
x_data = list()
y_data = list()
for data in year_data:
x_data.append(data[0]) # 加入国家作为横座标
y_data.append(data[1] / 1000000000) # 亿级数据,作为众座标
x_data.reverse()
y_data.reverse()
timeline.add(createBar(year, x_data, y_data), str(year))
timeline.add_schema(
is_auto_play=True,
is_timeline_show=True,
is_loop_play=False,
play_interval=1000
)
return timeline
# 构建柱状图方法,构建多个柱状图
def createBar(year, x_data, y_data):
bar = Bar()
# 增加X轴的数据
bar.add_xaxis(x_data)
# 设置Y轴数据,并设置数值显示在柱状图的右侧
bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
bar.reversal_axis() # X和Y轴反转显示,让上下柱状转为左右柱状
bar.set_global_opts(
title_opts=TitleOpts(title=f"{year}年各国GDP数据")
)
return bar
get_data("1960-2019全球GDP数据.csv").render(path="gdp数据.html")
THE END
0
二维码
打赏
海报
Python – 数据可视化
简介
本篇使用了 ECharts 图表和 Python 制作各种图表
可以先到 https://gallery.pyecharts.org/#/README 查看各种图表的介绍和使用
数据折线图
基础折线图使用了 ECharts 中的 Line
……
TZMing花园 - 软件分享与学习
共有 0 条评论