前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据可视化(三)

Python数据可视化(三)

原创
作者头像
Heaven645
发布2024-08-02 19:05:39
971
发布2024-08-02 19:05:39
举报
文章被收录于专栏:Python学习

前言

在大数据时代,数据可视化成为了分析和展示数据的重要手段。在众多数据可视化形式中,柱状图以其直观性和易读性而广受欢迎。本章基于案例分析详细讲解了柱状图的不同类型,包括基础柱状图以及动态柱状图。


本篇文章参考:黑马程序员

一、基础柱状图

①基本流程

导入必要的模块: 创建柱状图对象

添加x轴数据 添加x轴数据 设置全局选项 渲染或生成图像

②常见方法

Method

Function

Example

add_xaxis()

设置 x 轴的数据

bar.add_xaxis(["A", "B", "C", "D"])

add_yaxis()

添加 y 轴的数据

bar.add_yaxis("系列名称", [10, 20, 30, 40])

set_global_opts()

设置全局配置选项

bar.set_global_opts(title_opts=opts.TitleOpts(title="图表标题"))

set_series_opts()

设置系列特定配置

bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True))

render()

渲染图表并保存为 HTML 文件

bar.render("chart.html")

set_colors()

设置图表中柱子的颜色

bar.set_colors(['#d48265', '#91c7ae'])

reversal_axis()

反转轴

bar.reversal_axis()

set_tooltip()

自定义 tooltip 的显示方式

bar.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"))

set_legends()

自定义图例

bar.set_series_opts(label_opts=opts.LabelOpts(position="top"))

overlap()

将多个系列重叠显示

bar1.overlap(bar2)

datazoom()

添加数据缩放控件

bar.set_global_opts(datazoom_opts=[opts.DataZoomOpts()])

export_snapshot()

导出快照

bar.export_snapshot("snapshot.png")

绘制垂直柱状图:

代码语言:python
代码运行次数:0
复制
# 导包

from pyecharts.charts import Bar

# 使用Bar构建基础柱状图

bar=Bar()

# 添加x轴数据

bar.add\_xaxis(["中国","美国","英国"])

# 添加y轴数据

bar.add\_yaxis("GDP",["30","20","10"])

# 绘图

bar.render()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。

绘制水平柱状图:

通过reversal_axis()方法反转x轴和y轴。

代码语言:python
代码运行次数:0
复制
# 导包
from pyecharts.charts import Bar
from pyecharts.options import LabelOpts
# 使用Bar构建基础柱状图
bar=Bar()
# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
# 设置数值标签在右侧
bar.add_yaxis("GDP",["30","20","10"],label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar.reversal_axis()
# 绘图
bar.render()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。

二、动态柱状图

①创建时间线

柱状图主要用于描述分类数据,回答的是每个分类中『有多少?』这个问题,这是柱状图的主要特点。但是柱状图很难动态地描述一个趋势性的数据,这里pyecharts为我们提供了一种解决方案——时间线

如果说一个Bar或者Line对象是一张图表的话,那时间线就是创建一个一维的x轴,轴上每一个点就是一个图表对象。通过时间线,我们能够直观地展示随时间变化的数据趋势,使得数据的变化和发展过程一目了然。

方法:

timeline = Timeline()

Timeline()常用语法:

Method

Function

Example

__init__()

初始化时间线对象

timeline = Timeline()

add()

向时间线添加图表

timeline.add(chart, time)

add_schema()

添加时间线的基本配置

timeline.add_schema(play_interval=1000)

set_global_opts()

设置全局选项

timeline.set_global_opts(title_opts=opts.TitleOpts(title="时间线示例"))

render()

渲染图表并保存为HTML文件

timeline.render("timeline.html")

set_series_opts()

设置系列图表的选项

timeline.set_series_opts(label_opts=opts.LabelOpts(is_show=True))

set_colors()

设置时间线的颜色

timeline.set_colors(["#ff0000", "#00ff00"])

set_tooltip()

设置工具提示

timeline.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="axis"))

clear()

清空时间线中的所有图表

timeline.clear()

代码语言:python
代码运行次数:0
复制
# 导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts
# 使用Bar构建柱状图
bar1=Bar()
# 添加x轴数据
bar1.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
# 设置数值标签在右侧
bar1.add_yaxis("GDP",["30","20","10"],label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar1.reversal_axis()

bar2=Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",["50","30","30"],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()

bar3=Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",["60","50","40"],label_opts=LabelOpts(position="right"))
bar3.reversal_axis()

# 构建时间线对象
timeline=Timeline()
# 在时间线对象内添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")

# 绘图(通过时间线对象绘图)
timeline.render()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。

点1对应的柱状图:

点2对应的柱状图:

点3对应的柱状图:

②自动播放

可通过add_schema()方法添加时间线的基本配置,如是否自动播放、是否循坏播放、是否显示时间线等 。

代码语言:python
代码运行次数:0
复制
# 导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts
# 使用Bar构建柱状图
bar1=Bar()
# 添加x轴数据
bar1.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
# 设置数值标签在右侧
bar1.add_yaxis("GDP",["30","20","10"],label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar1.reversal_axis()

bar2=Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",["50","30","30"],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()

bar3=Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",["60","50","40"],label_opts=LabelOpts(position="right"))
bar3.reversal_axis()

# 构建时间线对象
timeline=Timeline()
# 在时间线对象内添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")

#自动播放设置
timeline.add_schema(
    # 自动播放的时间间隔,单位为毫秒
    play_interval=1000,
    # 是否显示时间线
    is_timeline_show=True,
    # 是否自动播放
    is_auto_play=True,
    # 是否循坏播放
    is_loop_play=True
)

# 绘图(通过时间线对象绘图)
timeline.render()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。每隔1000ms会轮换一张柱状图。

③时间线主题设置

在pyecharts中,我们可以通过主题设置来更改图表的外观。

基本语法:

timeline = Timeline({"theme": 时间线主题})

例如:

代码语言:python
代码运行次数:0
复制
# 构建时间线对象并进行主题设置
timeline = Timeline({"theme": ThemeType.LIGHT})

常用时间线主题:

代码语言:python
代码运行次数:0
复制
# 导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts
from pyecharts.globals import ThemeType
# 使用Bar构建柱状图
bar1=Bar()
# 添加x轴数据
bar1.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
# 设置数值标签在右侧
bar1.add_yaxis("GDP",["30","20","10"],label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar1.reversal_axis()

bar2=Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",["50","30","30"],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()

bar3=Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",["60","50","40"],label_opts=LabelOpts(position="right"))
bar3.reversal_axis()

# 构建时间线对象并进行主题设置
timeline = Timeline({"theme": ThemeType.LIGHT})
# 在时间线对象内添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")

#自动播放设置
timeline.add_schema(
    # 自动播放的时间间隔,单位为毫秒
    play_interval=1000,
    # 是否显示时间线
    is_timeline_show=True,
    # 是否自动播放
    is_auto_play=True,
    # 是否循坏播放
    is_loop_play=True
)

# 绘图(通过时间线对象绘图)
timeline.render()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。

三、案例分析

【案例——GDP动态柱状图】

1960-2019全球GDP数据.csv文本文件存储了2021年08月18日中国各省份疫情相关数据,请根据该数据绘制1960-2019年全球GDP排名前八的动态柱状图。

要求实现如下效果:

1.GDP数据处理为亿级

2.有时间轴,按照年份为时间轴的点

3.x轴和y轴反转,同时每一年的数据只要前8名国家

4.有标题,标题的年份会动态更改

5.设置了主题为LIGHT

解题思路:

需求分析

处理数据

列表排序

准备时间线

自动播放和绘图

【知识补充】

在前面我们学习过sorted()函数,可以对数据容器进行排序。而在该案例中,我们需要对列表进行排序,并指定排序规则,但sorted()函数无法完成该任务。这时我们需要补充学习列表的sort()方法。

①基本语法

列表.sort(key=选择排序依据的函数, reverse=True|False)

  • 参数key:要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
  • 参数reverse:是否反转排序结果,True表示降序,False表示升序

②书写方式

写法一:基于带名函数

代码语言:python
代码运行次数:0
复制
# 准备列表
my_list=[["a",33],["b",55],["c",11]]

# 排序(基于带名函数)
def choose_sort_key(element):
return element[1]

my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)

输出结果:

['b', 55, 'a', 33, 'c', 11]

写法二:基于lambda函数

lambda函数相关知识点见 Python函数进阶这篇文章。

代码语言:python
代码运行次数:0
复制
# 准备列表
my_list=[["a",33],["b",55],["c",11]]

# 排序(基于lambda函数)
my_list.sort(key=lambda element:element[1],reverse=True)
print(my_list)

输出结果:

['b', 55, 'a', 33, 'c', 11]

例题代码:

代码语言:python
代码运行次数:0
复制
# 导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts,TitleOpts
from pyecharts.globals import ThemeType

# 读取数据
# GB2312是针对简体中文字符集的编码,适用于处理中文文本
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data_lines=f.readlines()
# 关闭文件
f.close()
# 删除第一条数据
data_lines.pop(0)
# 将数据转换为字典存储
# 格式为:{年份:[国家,gdp],[国家,gdp],……}
data_dict={}
for line in data_lines:
    year=int(line.split(",")[0])   #得到年份
    country=line.split(",")[1]   #得到国家
    # 通过float将科学计数法表示的GDP值转换为正常的浮点数
    gdp=float(line.split(",")[2])   #得到GDP数据
    # 如何判断字典有没有指定的key呢?
    try:
        data_dict[year].append([country,gdp])
    except KeyError:
        data_dict[year]=[]
        data_dict[year].append(([country,gdp]))
# print(data_dict)   可以打印出来观察数据,方便理解
#输出数据:{1960: [['美国', 543000000000.0], ['英国', 73233967692.0],……],2019: [['美国', 21400000000000.0], ['中国', 14300000000000.0],……]}

# 排序年份
sorted_year_list=sorted(data_dict.keys())
# print(sorted_year_list)   可以打印出来观察数据,方便理解
#输出数据:[1960, 1961, 1962, ……]

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

# 排序每个年份各国的GDP
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element:element[1],reverse=True)
    # 取出本年份GDP前8名的国家
    year_data=data_dict[year][0:8]
    # print(year_data)   可以打印出来观察数据,方便理解
    """
    输出结果:
    [['美国', 543000000000.0], ['英国', 73233967692.0], ['法国', 62225478000.0], ['中国', 59716467625.0], ['日本', 44307342950.0], ['加拿大', 40461721692.0], ['意大利', 40385288344.0], ['印度', 37029883875.0]]
    [['美国', 563000000000.0], ['英国', 77741965703.0], ['法国', 67461644222.0], ['日本', 53508617739.0], ['中国', 50056868957.0], ['意大利', 44842760293.0], ['加拿大', 40934952063.0], ['印度', 39232435784.0]]
    [['美国', 605000000000.0], ['英国', 81247564156.0], ['法国', 75607529809.0], ['日本', 60723018683.0], ['意大利', 50383891898.0], ['中国', 47209359005.0], ['加拿大', 42227447631.0], ['印度', 42161481858.0]]
    [['美国', 639000000000.0], ['英国', 86561961812.0], ['法国', 84759195105.0], ['日本', 69498131797.0], ['意大利', 57710743059.0], ['中国', 50706799902.0], ['印度', 48421923458.0], ['加拿大', 45029988561.0]]
    ……
    """

    x_data=[]
    y_data=[]
    # for循坏每一年的数据,基于每一年的数据,创建每一年的bar对象
    for country_gdp in year_data:
        x_data.append(country_gdp[0])   # x轴添加国家
        y_data.append(country_gdp[1])   # y轴添加GDP数据

    # 构建柱状图
    bar=Bar()
    x_data.reverse()
    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}年全球排名前八GDP数据")
    )

    # 将每一年的bar对象添加到时间线中
    # str(year): 将年份转换为字符串,以确保它可以正确地与 bar 关联
    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()

打开render.html文件,点击右上角的浏览器图标,可以在浏览器中查看创建的柱状图。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、基础柱状图
  • 二、动态柱状图
  • 三、案例分析
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档