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
分享
二维码
打赏
海报
Python – 数据可视化
简介 本篇使用了 ECharts 图表和 Python 制作各种图表 可以先到 https://gallery.pyecharts.org/#/README 查看各种图表的介绍和使用   数据折线图 基础折线图使用了 ECharts 中的 Line ……
<<上一篇
下一篇>>