黑马程序员-python学习

1. 绘制三国疫情折线图

import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts

def get_data(filename, header_cl):
    """
    Parameters
    ----------
    :header_cl: 用于去除不合json规范的开头

    Returns
    -------
    :x_data: 日期数据,用于x轴, 取2020年
    :y_data: 确认数据,用于y轴,取2020年
    """
    f = open(filename,  "r", encoding="UTF-8")
    data = f.read()   # 全部内容
    # 去掉不合json规范的开头
    data = data.replace(header_cl, "")
    # 去掉不合json规范的结尾
    data = data[:-2]
    # json转python字典
    data_dict = json.loads(data)
    trend_data = data_dict['data'][0]['trend']

    # 获取日期数据,用于x轴, 取2020年
    x_data = trend_data['updateDate'][:314]
    # 获取确认数据,用于y轴,取2020年
    y_data = trend_data['list'][0]['data'][:314]

    f.close() # 关闭文件对象

    return x_data, y_data

f_us = open('第1-12章资料\资料\可视化案例数据\折线图数据\美国.txt',  "r", encoding="UTF-8")
us_data = f_us.read()   # 美国的全部内容
f_jp = open('第1-12章资料\资料\可视化案例数据\折线图数据\日本.txt',  "r", encoding="UTF-8")
jp_data = f_jp.read()   # 美国的全部内容
f_in = open('第1-12章资料\资料\可视化案例数据\折线图数据\印度.txt',  "r", encoding="UTF-8")
in_data = f_in.read()   # 美国的全部内容

f_us = '第1-12章资料\资料\可视化案例数据\折线图数据\美国.txt'
f_jp = '第1-12章资料\资料\可视化案例数据\折线图数据\日本.txt'
f_in = '第1-12章资料\资料\可视化案例数据\折线图数据\印度.txt'

header_us = "jsonp_1629344292311_69436("
header_jp = "jsonp_1629350871167_29498("
header_in = "jsonp_1629350745930_63180("

x_us, y_us = get_data(f_us, header_us)
x_jp, y_jp = get_data(f_jp, header_jp)
x_in, y_in = get_data(f_in, header_in)

# 生成图表
line = Line()
# 添加x数据
line.add_xaxis(x_us)  # x轴是共用的
# 添加y数据
line.add_yaxis("美国确诊人数", y_us, label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数", y_jp, label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数", y_in, label_opts=LabelOpts(is_show=False))

# 设置全局选项
line.set_global_opts(
    # 标题设置
    title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图", pos_left="center", pos_bottom="1%")
)

line.render()

2.  绘制中国各省份疫情情况地图

"""
全国疫情可视化地图
"""

import json
from pyecharts.charts import Map
from pyecharts.options import *

def province_name_tran(province_name):
    """
    省份简称转换为全称
    自治区:新疆维吾尔自治区、西藏自治区、内蒙古自治区、宁夏回族自治区、广西壮族自治区
    直辖市:北京市、天津市、上海市、重庆市
    特别行政区:香港特别行政区、澳门特别行政区
    """
    province_mapping = {
        "北京": "北京市",
        "天津": "天津市",
        "上海": "上海市",
        "重庆": "重庆市",
        "河北": "河北省",
        "山西": "山西省",
        "辽宁": "辽宁省",
        "吉林": "吉林省",
        "黑龙江": "黑龙江省",
        "江苏": "江苏省",
        "浙江": "浙江省",
        "安徽": "安徽省",
        "福建": "福建省",
        "江西": "江西省",
        "山东": "山东省",
        "河南": "河南省",
        "湖北": "湖北省",
        "湖南": "湖南省",
        "广东": "广东省",
        "海南": "海南省",
        "四川": "四川省",
        "贵州": "贵州省",
        "云南": "云南省",
        "陕西": "陕西省",
        "甘肃": "甘肃省",
        "青海": "青海省",
        "台湾": "台湾省",
        "内蒙古": "内蒙古自治区",
        "广西": "广西壮族自治区",
        "西藏": "西藏自治区",
        "宁夏": "宁夏回族自治区",
        "新疆": "新疆维吾尔自治区",
        "香港": "香港特别行政区",
        "澳门": "澳门特别行政区"
    }
    
    return province_mapping.get(province_name)


f = open("第1-12章资料\资料\可视化案例数据\地图数据\疫情.txt", "r", encoding="UTF-8")
data = f.read()  # 全部数据
f.close()

data_dict = json.loads(data)   # json字符串转字典
province_data_list = data_dict["areaTree"][0]["children"]  # 省份数据

# 元组 (省份名称,确诊人数)
data_list = []   # 绘图所用数据
for province_data in  province_data_list:
    province_name = province_data["name"]
    province_name = province_name_tran(province_name)   # 省份简称转换为全称
    province_confirm = province_data["total"]["confirm"]
    data_list.append((province_name, province_confirm))

# print(data_list)

# 创建地图对象
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, "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": "10000-99999人", "color": "#CC3333"},
            {"min": 100000, "label": "100000+", "color": "#990033"}
        ]
    )
)

map.render("全国疫情地图.html")

3.  河南省疫情地图 

"""
河南省疫情可视化地图
"""

import json
from pyecharts.charts import Map
from pyecharts.options import *

f = open("第1-12章资料\资料\可视化案例数据\地图数据\疫情.txt", "r", encoding="UTF-8")
data = f.read()  # 全部数据
f.close()

data_dict = json.loads(data)   # json字符串转字典
cities_data_list = data_dict["areaTree"][0]["children"][3]["children"]  # 河南省数据

# 元组 (城市名称,确诊人数)
data_list = []   # 绘图所用数据
for city_data in  cities_data_list:
    city_name = city_data["name"] + "市"
    city_confirm = city_data["total"]["confirm"]
    data_list.append((city_name, city_confirm))

# 手动添加济源市数据
data_list.append(("济源市", 5)) 

# print(data_list)

# 创建地图对象
map = Map()
# 添加数据
map.add("河南省疫情分布", data_list, "河南")
# 设置全局配置
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": "10000-99999人", "color": "#CC3333"},
            {"min": 100000, "label": "100000+", "color": "#990033"}
        ]
    )
)

map.render("河南省疫情地图.html")

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐