综合案例-数据可视化-柱状图

一、基础柱状图

我们绘制一个关于三种水果销售额的柱状图,X轴数据为三种水果的名称,用列表['苹果','香蕉','橘子']添加进去,Y轴数据为三种水果的销售额,用列表[50,70,60]添加进去。

步骤

  1. 导包
  2. 构建柱状图对象
  3. 添加X轴数据
  4. 生成地图

代码如下:

#导包
from pyecharts.charts import Bar
#构建柱状图对象
bar=Bar()
#添加X轴数据
bar.add_xaxis(['苹果','香蕉','橘子'])
#添加Y轴数据
bar.add_yaxis('销售额',[50,70,60])
#生成地图
bar.render('基础柱状图.html')

运行代码后,同文件目录下生成新文件“基础柱状图.html”,用Edge浏览器查看生成的图表。

如果我们想要反转x和y轴,并让数值标签位于右侧

#导包
from pyecharts.charts import Bar
from pyecharts.options import *
#构建柱状图对象
bar=Bar()
#添加X轴数据
bar.add_xaxis(['苹果','香蕉','橘子'])
#添加Y轴数据
bar.add_yaxis('销售额',[50,70,60],label_opts=LabelOpts(position='right'))#数值标签位于右侧
#反转X轴Y轴
bar.reversal_axis()
#生成地图
bar.render('基础柱状图.html')

生成的图表:

二、基础时间线柱状图

Timeline()-时间线: 柱状图描述的是分类数据,回答的是每一个分类中有多少这个问题。柱状图很难动态的描述一个趋势性的数据,pyecharts为我们提供了一种解决方案——时间线。

如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上每一个点就是一个图表对象,如下图所示:

我们绘制一个表示3个月水果销售额的基础时间线柱状图:

#导包
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *

#构建1月水果销售额柱状图
bar1=Bar()
bar1.add_xaxis(['苹果','香蕉','橘子'])
bar1.add_yaxis('销售额',[50,70,60])
bar1.reversal_axis()#反转X轴Y轴

#构建2月水果销售额柱状图
bar2=Bar()
bar2.add_xaxis(['苹果','香蕉','橘子'])
bar2.add_yaxis('销售额',[90,40,70])
bar2.reversal_axis()#反转X轴Y轴

#构建3月水果销售额柱状图
bar3=Bar()
bar3.add_xaxis(['苹果','香蕉','橘子'])
bar3.add_yaxis('销售额',[30,50,80])
bar3.reversal_axis()#反转X轴Y轴

#创建时间线对象
timeline=Timeline()

#timeline对象添加bar柱状图
timeline.add(bar1,'1月水果销售额')
timeline.add(bar2,'2月水果销售额')
timeline.add(bar3,'3月水果销售额')

#生成图表
timeline.render('基础时间线柱状图.html')

生成的图表:

除了手动点击时间线上的点来切换图表,我们还可以设置自动播放,设置主题(达到更美观的效果),代码如下:

#构建1月水果销售额柱状图
bar1=Bar()
bar1.add_xaxis(['苹果','香蕉','橘子'])
bar1.add_yaxis('销售额',[50,70,60])
bar1.reversal_axis()#反转X轴Y轴

#构建2月水果销售额柱状图
bar2=Bar()
bar2.add_xaxis(['苹果','香蕉','橘子'])
bar2.add_yaxis('销售额',[90,40,70])
bar2.reversal_axis()#反转X轴Y轴

#构建3月水果销售额柱状图
bar3=Bar()
bar3.add_xaxis(['苹果','香蕉','橘子'])
bar3.add_yaxis('销售额',[30,50,80])
bar3.reversal_axis()#反转X轴Y轴

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

#timeline对象添加bar柱状图
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('基础时间线柱状图.html')

 生成的图表会自动播放,视频形式更方便展示:ROMANTIC主题自动播放的基础时间线柱状图-CSDN直播ROMANTIC主题自动播放的基础时间线柱状图https://live.csdn.net/v/423471

不同主题对应的颜色:

想了解更多柱状图的用法,请访问官网:DocumentDescriptionicon-default.png?t=O83Ahttps://gallery.pyecharts.org/#/Bar/README

三、GDP动态柱状图

3.1列表排序

本节所用文件链接:
链接:https://pan.baidu.com/s/13ClaKEHF_Cu5wbuOqd4TTg?pwd=oz6z 
提取码:oz6z

文件 “ 1960-2019全球GDP数据.csv ” 内的数据如下图所示(建议使用Notepad++打开):

我们要把文件内的数据转化为柱状图,如下面的效果图所示:

简单分析后,发现效果图中的数据需要按照GDP排序,我们在对比总结各类数据容器时学习过sorted函数,sorted函数直接根据数据容器内的数据进行排序(回顾sorted函数:http://t.csdnimg.cn/wjtZK,3.4排序功能)。

但是当数据容器内数据比较复杂时(例如列表嵌套),就需要按照指定的数据排序,如本文件,需要在同一年份里,按照GDP排序(升序),图中只展现前8个国家的GDP,sorted函数不再适用。我们可以使用sort函数,语法如下:

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

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

基础示例:

#如下列嵌套列表,对外层列表进行排序,排序依据是内层列表的第二个元素(升序)
list1=[['苹果',30],['香蕉',60],['橘子',50]]
#定义排序规则
def choose_sort_key(element):
    return element[1]
#排序
list1.sort(key=choose_sort_key,reverse=True)
print(list1)

输出:

[['香蕉', 60], ['橘子', 50], ['苹果', 30]]

我们还可以使用 lambda匿名函数(回顾知识:http://t.csdnimg.cn/MRZnC,3.2 lambda匿名函数),写出更简洁的代码:

#如下列嵌套列表,对外层列表进行排序,排序依据是内层列表的第二个元素(升序)
list1=[['苹果',30],['香蕉',60],['橘子',50]]
#定义排序规则
def choose_sort_key(element):
    return element[1]
#排序
#list1.sort(key=choose_sort_key,reverse=True)
list1.sort(key=lambda element:element[1],reverse=True)
print(list1)

输出:

[['香蕉', 60], ['橘子', 50], ['苹果', 30]]

3.2处理数据并生成图表

我们要处理一下文件“ 1960-2019全球GDP数据.csv ”中的数据,数据是csv格式,在使用open函数读取文件时要注意,编码格式不再是最常见的“ UTF-8 ”,而是“ GB2312 ”,我们可以在Notepad++界面的右下角看到(“ 1960-2019全球GDP数据.csv ”用记事本打开其编码格式不清晰,建议使用Notepad++):

文件开头的标题行需要删去。

绘制图表的步骤如下:

  1. 读取数据文件。
  2. 利用for循环将数据转换为python字典。
  3. 在时间线上添加点(每年的GDP柱状图)。
  4. 设置自动播放,生成图表。

代码如下所示:

#导包
from pyecharts.charts import Bar,Timeline
from pyecharts.globals import ThemeType
from pyecharts.options import *

#读取数据文件
f=open('E:/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv','r',encoding='GB2312')
lines=f.readlines() #按行获取文件内全部数据,返回一个列表,其中每一行的数据为一个元素
#删除文件第一行数据
lines.pop(0)
#将数据转换为python字典,格式:{年份:[[国家, gdp], [国家,gdp],......],年份: [[国家, gdp],[国家,gdp],......],......}
data_dict={}
for line in lines:  #lines是列表,每行数据为一个元素
    year=int(line.split(',')[0]) #每行数据为一个元素,比如‘1960,英国,73233967692’,需要切割,第一个是年份
    country=line.split(',')[1] #每行数据为一个元素,比如‘1960,英国,73233967692’,需要切割,第二个是国家名称
    gdp=float(line.split(',')[2]) #切割,第三个是GDP,GDP是数字,此处float用来避免科学计数法数据格式,保留数据原样
    try:   #用异常处理控制字典新增元素,详解见代码下方
        data_dict[year].append((country,gdp)) #在对应的年份后追加元素[国家,gdp]
    except KeyError:
        data_dict[year]=[] #字典新增元素 year:列表
        data_dict[year].append((country, gdp))
#准备时间线
sorted_year_list=sorted(data_dict.keys())#对年份进行排序,从1960年开始,默认升序
#创建时间线对象并设置主题
timeline=Timeline({'theme':ThemeType.LIGHT})
#timeline对象添加bar柱状图
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element:element[1],reverse=True)#每个年份内的“国家+GDP”数据按GDP排序(升序)
    year_data=data_dict[year][0:8] #排完序后取最高的前8位国家
    countrys=[] #用来保存X轴数据
    gdps=[]     #用来保存Y轴数据
    for country_gdp in year_data:
        countrys.append(country_gdp[0])
        gdps.append(int(country_gdp[1]/100000000))   #GDP单位为亿
    #创建柱状图对象
    bar=Bar()
    countrys.reverse() #详解见代码下方
    gdps.reverse()     #详解见代码下方
    #设置标题
    bar.set_global_opts(title_opts=TitleOpts(title=f'{year}年全球前8的GDP国际'))
    #添加X轴数据
    bar.add_xaxis(countrys)
    #添加Y轴数据
    bar.add_yaxis('GDP(亿)',gdps,label_opts=LabelOpts(position='right'))#标签在右侧
    #反转X轴和Y轴
    bar.reversal_axis() #得到横向的柱状图
    #timeline对象添加bar柱状图,即在时间线上添加点
    timeline.add(bar,str(year))
#设置自动播放
timeline.add_schema(
    play_interval=1000,     #自动播放的时间间隔,单位毫秒
    is_timeline_show=True,  #是否在自动播放时显示时间线
    is_auto_play=True,      #是否自动播放
    is_loop_play=False       #是否循环自动播放

)
#生成图表
timeline.render('GDP动态柱状图.html')

第二步中需要注意:

  • 将数据转换为python字典,格式:{年份:[[国家, gdp],[国家,gdp],......],年份::[[国家,gdp],[国家,gdp],......],......},即年份为keyvalue内包含这一年所有国家的名称和GDP,value是列表类型,列表的元素类型为列表(嵌套),每个列表的内容:每个国家名称+对应的GDP。
  • 一个年份key对应的value内是所有国家的名称和GDP的列表,在字典data_dict中追加元素时,每次追加一个元素[国家,gdp],我们需要判断这个年份是否已经存在,即添加这个年份的数据是否是第一次添加,因为年份“一年”才能添加一次,如果此次都添加年份,数据格式就会混乱。这个年份如果存在,直接追加元素[国家,gdp],如果不存在,先追加年份这个key,再去追加对应的value中的元素[国家,gdp]。

第三步中需要注意:

因为我们要得到横向的柱状图,且保持GDP高的国家在上方,原本的X轴,Y轴反转后,X轴,Y轴的数据也要跟着反转,如下例所示:

X轴,Y轴的数据也要跟着反转后:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/875173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 12系统源码_窗口管理(八)WindowConfiguration的作用

前言 在Android系统中WindowConfiguration这个类用于管理与窗口相关的设置,该类存储了当前窗口的显示区域、屏幕的旋转方向、窗口模式等参数,应用程序通过该类提供的信息可以更好的适配不同的屏幕布局和窗口环境,以提高用户体验。 一、类定…

喜报 | 知从科技荣获 “AutoSec 安全之星 - 优秀汽车软件供应链安全方案奖”

近日,「AutoSec 2024第八届中国汽车网络安全周暨第五届智能汽车数据安全展」在上海盛大举行。本届大会由谈思实验室和谈思汽车主办、上海市车联网协会联合主办,以汽车“网络数据安全、软件安全、功能安全”为主题,设置了“31X”模式&#xff…

关于 PC打开“我的电脑”后有一些快捷如腾讯视频、百度网盘、夸克网盘、迅雷等各种捷方式在磁盘驱动器上面统一删除 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142029325 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

numpy(基于Numpy外文文档的学习)

学习目标: Understand the difference between one-, two- and n-dimensional arrays in NumPy; Understand how to apply some linear algebra operations to n-dimensional arrays without using for-loops;(调用一些简单的方法) Underst…

外包干了三年,快要废了。。。

先简单说一下自己的情况,普通本科,在外包干了3年多的功能测试,这几年因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境真的会…

Docker 部署 Redis (图文并茂超详细)

部署 Redis ( Docker ) [Step 1] : 拉取 Redis 镜像, 推荐使用 7 的 Redis 版本 docker pull redis:7.0.12[Step 2] : 创建 Redis 相关目录 ➡️ 启动 Redis 容器 ➡️ 拷贝文件 ➡️ 授权文件夹 ➡️ 删除容器 # 创建 Redis 相关目录 mkdir -p /data/redis/{conf,data,log…

写的一致性问题之失效模式

文章目录 1、先删除redis缓存,再写入mysql:1.1、高并发情况下分析出现的问题 2、先写入mysql,再删除redis缓存 失效模式存在的问题:在事务提交之前可能会有其他读操作重新把旧数据放入redis缓存中 1、先删除redis缓存,…

深入解析全连接层:PyTorch 中的 nn.Linear、nn.Parameter 及矩阵运算

文章目录 数学概念(全连接层,线性层)nn.Linear()nn.Parameter()Q1. 为什么 self.weight 的权重矩阵 shape 使用 ( out_features , in_features ) (\text{out\_features}, \text{in\_features}) (out_features,in_features)而不是 ( in_featur…

Bev pool 加速(2):自定义c++扩展

文章目录 1. c++扩展2. 案例2.1 案例12. 1.1 代码实现(1) c++ 文件(2) setup.py编写(3) python 代码编写2.2 案例22.2.1 模型搭建2.2.2 c++ 扩展实现(1)c++ 扩展代码(2)setup.py编写(3)python 调用c++扩展在bevfusion论文中,将bev_pooling定义为view transform中的效率瓶…

PROTOTYPICAL II - The Practice of FPGA Prototyping for SoC Design

The Art of the “Start” The semiconductor industry revolves around the “start.” Chip design starts lead to more EDA tool purchases, more wafer starts, and eventually to more product shipments. Product roadmaps develop to extend shipments by integrating…

FloodFill算法

文章目录 1. 图像渲染(733)2. 岛屿数量(200)3. 岛屿的最大面积(695)4. 被围绕的区域(130) 1. 图像渲染(733) 题目描述: 算法原理: …

DAY13信息打点-Web 应用源码泄漏开源闭源指纹识别GITSVNDS备份

#知识点 0、Web架构资产-平台指纹识别 1、开源-CMS指纹识别源码获取方式 2、闭源-习惯&配置&特性等获取方式 3、闭源-托管资产平台资源搜索监控 演示案例: ➢后端-开源-指纹识别-源码下载 ➢后端-闭源-配置不当-源码泄漏 ➢后端-方向-资源码云-源码泄漏 …

1、https的全过程

目录 一、概述二、SSL过程如何获取会话秘钥1、首先认识几个概念:2、没有CA机构的SSL过程:3、没有CA机构下的安全问题4、有CA机构下的SSL过程 一、概述 https是非对称加密和对称加密的过程,首先建立https链接需要经过两轮握手: T…

算法提高模板强连通分量tarjan算法

AC代码&#xff1a; #include<bits/stdc.h>using namespace std;typedef long long ll; const int MOD 998244353; const int N 2e5 10;//强联通分量模板 //tarjan算法 vector<int>e[N]; int n, m, cnt; int dfn[N], low[N], ins[N], idx; int bel[N];//记录每…

Redis高可用,Redis性能管理

文章目录 一&#xff0c;Redis高可用&#xff0c;Redis性能管理二&#xff0c;Redis持久化1.RDB持久化1.1触发条件&#xff08;1&#xff09;手动触发&#xff08;2&#xff09;自动触发 1.2 Redis 的 RDB 持久化配置1.3 RDB执行流程(1) 判断是否有其他持久化操作在执行(2) 父进…

Chainlit集成Langchain并使用通义千问实现文生图网页应用

前言 本文教程如何使用通义千问的大模型服务平台的接口&#xff0c;实现图片生成的网页应用&#xff0c;主要用到的技术服务有&#xff0c;chainlit 、 langchain、 flux。合利用了大模型的工具选择调用能力。实现聊天对话生成图片的网页应用。 阿里云 大模型服务平台百炼 API…

R语言统计分析——功效分析3(相关、线性模型)

参考资料&#xff1a;R语言实战【第2版】 1、相关性 pwr.r.test()函数可以对相关性分析进行功效分析。格式如下&#xff1a; pwr.r.test(n, r, sig.level, power, alternative) 其中&#xff0c;n是观测数目&#xff0c;r是效应值&#xff08;通过线性相关系数衡量&#xff0…

NAT技术+代理服务器+内网穿透

NAT技术 IPv4协议中&#xff0c;会存在IP地址数量不充足的问题&#xff0c;所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的&#xff0c;而公网中的IP地址都是唯一的&#xff0c;所以NAT&#xff08;Network Address Translation&…

跨平台集成:在 AI、微服务和 Azure 云之间实现无缝工作流

跨平台集成在现代 IT 架构中的重要性 随着数字化转型的不断加速&#xff0c;对集成各种技术平台的需求也在快速增长。在当今的数字世界中&#xff0c;组织在复杂的环境中执行运营&#xff0c;其中多种技术需要无缝协作。环境的复杂性可能取决于业务的性质和组织提供的服务。具…

Windows更新之后任务栏卡死?桌面不断闪屏刷新?

前言 小白这几天忙于工作&#xff0c;更新就变得异常缓慢。但就算这么忙的情况下&#xff0c;晚上休息的时间还是会给小伙伴们提供咨询和维修服务。 这不&#xff0c;就有一个小伙伴遇到了个很奇怪的问题&#xff1a;电脑Windows更新之后&#xff0c;任务栏点了没反应&#xf…