Python基础(六)——PyEcharts数据可视化初级版

案例

【前言:为了巩固之前的Python基础知识(一)到(五),并为后续使用Python作为数据处理的好帮手,我们一起来看几个例子】

使用工具:Echarts

  • Echarts 是一个由百度开源的数据可视化,而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。https://pyecharts.org
    第三方包pyecharts就是echartspython接口,方便python用户开发。

  • json:是一种轻量级的数据交互格式,本质上是一个带有特定格式的字符串,是在各种编程语言中流通的数据格式。

    其格式可理解为:python数据类型的字典或元素为字典的列表

    python">import json
    # 将内容转换为json格式
    data = [{"name":"米","age":12},{"name":"面","age":22},{"name":"粥","age":18}]
    # 其中ensure_ascii = False可以省略,其作用是不使用ASCII码将内容输出,而是直接将内容显示,可使中文正常显示
    json_str = json.dumps(data, ensure_ascii = False)
    print(json_str)
    
    # 将json格式还原为列表或字典
    py_type = json.loads(data)
    print(py_type)
    
    代码作用
    json.dumps()将内容转换为json格式
    json.loads()将json格式转换为python数据类型

    pyecharts中文使用手册:https://pyecharts.org/#/zh-cn/

    pyecharts画廊:https://gallery.pyecharts.org/

    常用工具网站:https://www.ab173.com/

    配置类型

  • 全局配置:使用set_global_opts方法,详细内容查看官方使用手册

  • 局部配置:

一、折线图数据可视化

python"># 构建基础折线图
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts, TooltipOpts, LabelOpts
# 得到折线图对象
line = Line()
# 添加x轴
line.add_xaxis(["中国", "美国", "德国"])
# 添加y轴,注意:此处数据均为测试而虚构
line.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(is_show=False))
# 全局配置
line.set_global_opts(
    title_opts=TitleOpts(is_show=True, 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),
    tooltip_opts=TooltipOpts(is_show=True)
)
# 生成图表
line.render()

折线图<a class=数据可视化" />

二、地图可视化

python">from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
map = Map()
data = [ # 注意数据需要以元组形式使用,注意:此处数据均为测试而虚构
    ("北京市", 100),
    ("上海市", 90),
    ("广东省", 80),
    ("台湾省", 70),
]
map.add("地图", data, "china")
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True, # 是否显示
        is_piecewise=True,# 是否分段
        pieces=[
            {"min":1, "max":49, "lable":"1-49", "color":"#CCFFFF"},
            {"min":50, "max":79, "lable":"50-79", "color":"#FFFF99"},
            {"min":80, "max":89, "lable":"80-89", "color":"#FF9966"},
            {"min":90, "max":100, "lable":"90-100", "color":"#CC3333"},
        ]
    )
)
map.render()

地图可视化

三、动态柱状图可视化

python">from pyecharts.options import *
from pyecharts.charts import Timeline, Bar
from pyecharts.globals import ThemeType
# 注意:此处数据均为测试而虚构
bar1 = Bar()
bar1.add_xaxis(["中国", "美国", "英国"])
bar1.add_yaxis("GDP", [35, 25, 10], label_opts=LabelOpts(  # 将y轴上显示数值在图形右侧
    position="right"
))
bar1.reversal_axis() # 反转xy轴
bar2 = Bar()
bar2.add_xaxis(["中国", "美国", "英国"])
bar2.add_yaxis("GDP", [45, 10, 25], label_opts=LabelOpts(  # 将y轴上显示数值在图形右侧
    position="right"
))
bar2.reversal_axis() # 反转xy轴

# 创建时间线
timeline = Timeline(
    {"theme":ThemeType.LIGHT} # 设置全局主题颜色
)
timeline.add(bar1, "2022年GDP")
timeline.add(bar2, "2023年GDP")
# 设置自动播放
timeline.add_schema(
    play_interval=1000, # 自动播放时间间隔,单位毫秒
    is_timeline_show=True, # 自动播放时候是否显示时间线
    is_auto_play=True, # 是否自动播放
    is_loop_play=True # 是否循环播放
)
# 通过时间线绘制
timeline.render()

动态柱状图可视化

科学计数法表示的数据可以使用float()强制类型转换为数值

python">from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

# 读取数据
f = open("D:/test.csv", 'r', encoding="UTF-8")
"""
原数据存储格式
年份,国家,gdp
年份,国家,gdp
年份,国家,gdp
年份,国家,gdp
…………
"""
# 按行读取所有数据并存为列表
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一条数据,本质上是清除多余数据
data_lines.pop(0)
# 定义一个空字典对象,为格式化存储数据做准备
data_dict = {}
"""
{年份1: [[国家,gdp], [国家,gdp],……],
年份2: [[国家,gdp], [国家,gdp],……],
年份3: [[国家,gdp], [国家,gdp],……],……}
"""
for line in data_lines: # 根据逗号分割数据,并分别存储
    year = int(line.split(",")[0])  # 年份
    country = line.split(",")[1]    # 国家
    gdp = line.split(",")[2]        # gdp

    # 判断字典中是否有指定的年份key,将同一年份下所有国家和gdp数据对应存储
    try: # 有可能出现异常的语句
        data_dict[year].append([country, gdp])
    except KeyError as e: # 如果出现该异常,则证明该年份不存在
        data_dict[year] = [] # 新建该年份key的value(数据类型为列表)
        data_dict[year].append([country, gdp]) # 将[国家,gdp]列表作为一个元素追加到数据类型为列表的value中

# 创建时间线对象
timeline = Timeline(
    {"theme": ThemeType.Light} # 设置主题颜色
)

# 由于字典的无序性,需要手动排序年份
sorted_year_list = sorted(data_dict.keys())
# 根据gdp从大到小排序
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 取出每年份gdp前8的国家与其gdp
    year_data = data_dict[year][:8]
    x_data = []
    y_data = []
    for country_gdp in year_data: # 将国家赋值给x轴,gdp赋值给y轴
        x_data.append(country_gdp[0])
        y_data.append(country_gdp[1])

        # 构建柱状图
        bar = Bar()
        bar.add_xaxis("国家", x_data)
        bar.add_yaxis("GDP(元)", y_data,  label_opts=LabelOpts(position="right"))
        # 反转xy轴
        bar.reversal_axis()
        bar.set_global_opts(
            title_opts=TitleOpts(title=f"{year}年全球GDP前8数据")
        )
        timeline.add(bar, str(year))

# 设置时间线自动播放
timeline.add_schema(
    play_interval=1000,
    is_timeline_show=True,
    is_loop_play=True,
    is_auto_play=True
)
# 通过时间线绘制
timeline.render("全球GDP前8国家")

记录学习过程的笔记,欢迎大家一起讨论,会持续更新


http://www.niftyadmin.cn/n/5665869.html

相关文章

JSON.parseArray 内存溢出

实际上我的JSON如下&#xff1a; 如果用以下代码&#xff1a;JVM的内存直接飙到内存溢出&#xff0c;报错OutOfMemoryError: Java heap space Object oo JSON.parseArray(json, TestVo.class) 如果我换成了这样&#xff0c;就没事&#xff1a; Object oo JSON.parseObject(…

闲鱼网页版开放,爬虫的难度指数级降低。

爬虫&#xff0c;可以说是程序员最基础的热手项目。 之前我也一直说阿里系的签名系统搞得太复杂&#xff0c;风控太高&#xff0c;很不利于正常的自动化工具开发&#xff0c;这对于需要阿里应用的客户来说&#xff0c;也是一个很难覆盖的成本支出不是。 当然&#xff0c;我做项…

计算机人工智能前沿进展-大语言模型方向-2024-09-14

计算机人工智能前沿进展-大语言模型方向-2024-09-14 1. Multimodal learning using large language models to improve transient identification of nuclear power plants B Qi, J Sun, Z Sui, X Xiao, J Liang - Progress in Nuclear Energy, 2024 使用大型语言模型进行多…

PgMP和CSPM-3有什么不同?是什么关系?

CSPM-3和PgMP在项目管理领域都是具有权威性和认可度的证书&#xff0c;但两者并不直接等同。CSPM-3是中国国内的项目管理专业人员能力等级证书&#xff0c;而PgMP则是美国项目管理协会推出的项目集管理专业人士认证。下面给大家讲解一下他们的区别。 一、概念不同 什么是CSPM…

linux下io事件管理:单个I/O通讯

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、I/O是什么&#xff1f;二、单个I/O服务端通讯1.定义客户端&#xff0c; 前言 1、使用微信&#xff1a;发送文字、图片、视频等内容&#xff0c;如何实现&a…

21. 什么是MyBatis中的N+1问题?如何解决?

N1 问题是指在进行一对多查询时&#xff0c;应用程序首先执行一条查询语句获取结果集&#xff08;即 1&#xff09;&#xff0c;然后针对每一条结果&#xff0c;再执行 N 条额外的查询语句以获取关联数据。这个问题通常出现在 ORM 框架&#xff08;如 MyBatis 或 Hibernate&…

html页面整合vue2或vue3

Vue 2 使用指南 1. 引入 Vue 2 1.1 下载 Vue 2 下载地址: Vue 2 下载文件名: vue.min.js保存位置: 项目目录/js/vue.min.js 1.2 引入 Vue 2 文件 在 HTML 文件的 <head> 部分引入 Vue 2&#xff1a; <!DOCTYPE html> <html lang"en"> <he…

Linux平台UOS系统摄像头播放

关于播放功能做了很久得研究,网上关于Linux平台摄像头播放资料比较少,目前研究出3种实现摄像头播放的方式。 注:三种方式均在jdk版本21基础上实现。 一 WebCam实现本地摄像头预览 1.引入webcam 在pom.xml中加入,即可 <dependency> <groupId>c…