探索数据之美:初步学习 Python 柱状图绘制

文章目录

  • [一 基础柱状图](#一 基础柱状图)
    • [1.1 创建简单柱状图](#1.1 创建简单柱状图)
    • [1.2 反转x和y轴](#1.2 反转x和y轴)
    • [1.3 数值标签在右侧](#1.3 数值标签在右侧)
    • [1.4 演示结果](#1.4 演示结果)
  • [二 基础时间线柱状图](#二 基础时间线柱状图)
    • [2.1 创建时间线](#2.1 创建时间线)
    • [2.2 时间线主题设置取值表](#2.2 时间线主题设置取值表)
    • [2.3 演示结果](#2.3 演示结果)
  • [三 GDP动态柱状图绘制](#三 GDP动态柱状图绘制)
    • [3.1 需求分析](#3.1 需求分析)
    • [3.2 数据文件内容](#3.2 数据文件内容)
    • [3.3 列表排序方法](#3.3 列表排序方法)
    • [3.4 参考代码](#3.4 参考代码)
    • [3.5 运行结果](#3.5 运行结果)

一 基础柱状图

1.1 创建简单柱状图

  • pyecharts 是一个基于 Echarts 的 Python 图表库,它提供了丰富的图表类型和交互功能。可以使用使用 pyecharts 创建柱状图

首先,安装 pyecharts 库。如果没有安装,可以使用以下命令安装:

bash 复制代码
pip install pyecharts

然后,创建一个简单的柱状图:

python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar

# 示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [25, 40, 30, 50]

# 创建柱状图实例
bar_chart = Bar()

# 添加数据
bar_chart.add_xaxis(categories)
bar_chart.add_yaxis("Values", values)

# 设置标题和标签
bar_chart.set_global_opts(title_opts=opts.TitleOpts(title="Basic Bar Chart"),
                          xaxis_opts=opts.AxisOpts(name="Categories"),
                          yaxis_opts=opts.AxisOpts(name="Values"))

# 渲染图表
bar_chart.render("basic_bar_chart.html")
  • 在这个示例中,首先导入 pyecharts 的必要模块。然后,创建一个 Bar 实例,代表柱状图。接着,使用 add_xaxisadd_yaxis 方法分别添加 x 轴和 y 轴的数据。还使用 set_global_opts 方法设置了标题和轴标签的选项。最后,使用 render 方法将图表渲染为 HTML 文件。

1.2 反转x和y轴

  • 可以使用pyecharts 的 Bar 类中的 reversal_axis() 方法翻转 x 轴和 y 轴
python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar

# 示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [25, 40, 30, 50]

# 创建柱状图实例
bar_chart = Bar()

# 添加数据
bar_chart.add_xaxis(categories)
bar_chart.add_yaxis("Values", values)

# 设置标题和标签
bar_chart.set_global_opts(title_opts=opts.TitleOpts(title="Basic Bar Chart"),
                          xaxis_opts=opts.AxisOpts(name="Categories"),
                          yaxis_opts=opts.AxisOpts(name="Values"))
# 反转x和y轴
bar_chart.reversal_axis()

# 渲染图表
bar_chart.render("basic_bar_chart.html")

1.3 数值标签在右侧

  • 通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示
python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar

# 示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [25, 40, 30, 50]

# 创建柱状图实例
bar_chart = Bar()

# 添加数据
bar_chart.add_xaxis(categories)
bar_chart.add_yaxis("Values", values, label_opts=opts.LabelOpts(position="right"))

# 设置标题和标签
bar_chart.set_global_opts(title_opts=opts.TitleOpts(title="Basic Bar Chart"),
                          xaxis_opts=opts.AxisOpts(name="Categories"),
                          yaxis_opts=opts.AxisOpts(name="Values"))
# 反转x和y轴
bar_chart.reversal_axis()

# 渲染图表
bar_chart.render("basic_bar_chart.html")

1.4 演示结果

二 基础时间线柱状图

2.1 创建时间线

  • Timeline()-时间线
  • 柱状图的主要特点,:状图描述的是分类数据,回答的是每一个分类中有多少的问题。同时柱状图很难动态的描述一个趋势性的数据. 这里pyecharts为我们提供了一种解决方案-时间线
  • 如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上每一个点就是一个图表对象
python 复制代码
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, 30, 20], label_opts=LabelOpts(position="right"))
bar1.reversal_axis()

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()
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  # 是否循环播放
)

# 绘图是用时间线对象绘图,而不是bar对象了
timeline.render("基础时间线柱状图.html")

2.2 时间线主题设置取值表

2.3 演示结果

三 GDP动态柱状图绘制

3.1 需求分析

简单分析后,发现最终效果图中需要:

  1. GDP数据处理为亿级
  2. 有时间轴,按照年份为时间轴的点
  3. x轴和y轴反转,同时每一年的数据只要前8名国家
  4. 有标题,标题的年份会动态更改
  5. 设置了主题为LIGHT

3.2 数据文件内容

bash 复制代码
year,GDP,rate
1960,美国,5.433E+11
1960,英国,73233967692
1960,法国,62225478000
1960,中国,59716467625
1960,日本,44307342950
1960,加拿大,40461721692

3.3 列表排序方法

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

  • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
  • 参数reverse,是否反转排序结果,True表示降序,False表示升序
python 复制代码
my_list = [["a", 33], ["b", 55], ["c", 11]]

# 排序,基于带名函数
# def choose_sort_key(element):
#     return element[1]
#
# my_list.sort(key=choose_sort_key, reverse=False)

# 使用 sort() 方法,按子列表中的第二个元素排序
my_list.sort(key=lambda x: x[1])

print("升序排序:", my_list)
# 升序排序: [['c', 11], ['a', 33], ['b', 55]]

my_list.sort(key=lambda x: x[1], reverse=True)

print("降序排序:", my_list)
# 降序排序: [['b', 55], ['a', 33], ['c', 11]]
  • key=lambda x: x[1]Lambda 表达式是一个用于比较排序的函数,它告诉 sort() 方法按照子列表中的第二个元素进行排序

3.4 参考代码

python 复制代码
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

# 读取数据
f = open("c:/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()
# 关闭文件
f.close()

# 删除第一条数据
data_lines.pop(0) # year,GDP,rate

# 将数据转换为字典存储,格式为:
# { 年份: [ [国家, gdp], [国家,gdp], ......  ], 年份: [ [国家, gdp], [国家,gdp], ......  ], ...... }
# { 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])     # gdp数据
    # 判断字典里面有没有指定的key
    try:
        data_dict[year].append([country, gdp])
    except KeyError:
        data_dict[year] = []
        data_dict[year].append([country, gdp])


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

# 排序年份
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 取出本年份前8名的国家
    year_data = data_dict[year][0:8]
    x_data = [] #countrys
    y_data = [] #gdps 
    for country_gdp in year_data:
        x_data.append(country_gdp[0])   # x轴添加国家
        y_data.append(country_gdp[1] / 100000000)   # y轴添加gdp数据

	# 构建柱状图
	bar = Bar() # 创建柱状图
	x_data.reverse() # 反转国家,使GDP最高的排在最上面
	y_data.reverse() # 同步反转GDP数据
	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)) #时间线添加一个点,和对应的bar图


# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
# 在for中,将每一年的bar对象添加到时间线中

# 设置自动播放
timeline.add_schema(
    play_interval=1000,
    is_timeline_show=True,
    is_auto_play=True,
    is_loop_play=False
)

# 绘图
timeline.render("1960-2019全球GDP前8国家.html")

3.5 运行结果

相关推荐
兆。3 分钟前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
小华同学ai9 分钟前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
cuisidong199729 分钟前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
南宫理的日知录37 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
coberup1 小时前
django Forbidden (403)错误解决方法
python·django·403错误
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
数据与后端架构提升之路2 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
小白学大数据2 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9112 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路2 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗