python数据可视化(一)


一、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")


总结

提示:
例如:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值