python实现动态柱状图
创始人
2024-05-02 01:36:21

目录

一.基础柱状图

 反转x轴,y轴,设置数值标签在右侧

 小结

二.基础时间线柱状图

三.GDP动态柱状图绘制

1.了解列表的sort方法并配合lambda匿名函数完成列表排序

2.完成图表所需数据

3.完成GDP动态图表绘制

添加主题类型

 设置动态标题

 四.完整代码

五.数据集


 

注:数据集在文章最后

一.基础柱状图

如图

 演示

from pyecharts.charts import Bar
from pyecharts.options import *
#构建柱状图对象
bar=Bar()
#添加x轴对象
bar.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar.add_yaxis("GDP",[40,50,30])
#设置全局选项
bar.set_global_opts(title_opts=TitleOpts(title="GDP柱状图"),#加名称visualmap_opts=VisualMapOpts(#加范围显示is_show=True)
)
#绘图
bar.render("基础柱状图.html")

结果是

 

 反转x轴,y轴,设置数值标签在右侧

#添加y轴对象
bar.add_yaxis("GDP",[40,50,30],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar.reversal_axis()

结果是

 小结

  1. 通过Bar()构建一个柱状图对象
  2. 和折线图一样,通过add_xaxis()和add_yaxis()添加x和y轴数据
  3. 通过柱状图对象的: reversal_axis(),反转x和y轴
  4. 通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示

二.基础时间线柱状图

 演示

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
#构建柱状图对象
bar1=Bar()
#添加x轴对象
bar1.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar1.add_yaxis("GDP",[40,50,30],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar1.reversal_axis()
#设置全局选项
bar1.set_global_opts(title_opts=TitleOpts(title="GDP柱状图"),#加名称visualmap_opts=VisualMapOpts(#加范围显示is_show=True)
)#构建柱状图对象
bar2=Bar()
#添加x轴对象
bar2.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar2.add_yaxis("GDP",[50,60,45],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar2.reversal_axis()
#设置全局选项
bar2.set_global_opts(title_opts=TitleOpts(title="GDP柱状图"),#加名称visualmap_opts=VisualMapOpts(#加范围显示is_show=True)
)#构建柱状图对象
bar3=Bar()
#添加x轴对象
bar3.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar3.add_yaxis("GDP",[60,65,40],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar3.reversal_axis()
#设置全局选项
bar3.set_global_opts(title_opts=TitleOpts(title="GDP柱状图"),#加名称visualmap_opts=VisualMapOpts(#加范围显示is_show=True)
)#构建时间线对象
timeline=Timeline({"theme":ThemeType.LIGHT})
#在时间线上添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")#绘图是用时间线对象绘图,而不是用 bar了
timeline.render("基础时间线柱状图.html")

结果是

 

 

 点击下面不同的点,就会显示出不同的柱状图

当然,这不是我们想要的最终结果,我们希望他可以制动播放并且一直循环下去

代码

#自动播放设置
timeline.add_schema(play_interval=1000,#这里是放下一张图的时间间隔,毫秒为单位is_timeline_show=True,#是否显示时间线is_auto_play=True,#是否自动播放is_loop_play=True#是否循环播放
)#绘图是用时间线对象绘图,而不是用 bar了
timeline.render("基础时间线柱状图.html")

结果是

这样我们就可以控制上图中的“播放键”去控制是否自动循环播放 

三.GDP动态柱状图绘制

1.了解列表的sort方法并配合lambda匿名函数完成列表排序

在前面我们学习过sorted函数,可以对数据容器进行排序。
在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。我们补充学习列表的sort方法。
使用方式:
列表.sort(key=选择排序依据的函数, reverse=TruelFalse)

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

演示

my_list=[["a",12],["b",4],["c",45]]
def choose_sort_key(element):return element[1]my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)my_list.sort(key=lambda element:element[1],reverse=False)
print(my_list)

结果是

上图中,第一种是基于带名函数,第二种是基于lambda函数

2.完成图表所需数据

#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:year=int(line.split(",")[0])#年份country=line.split(",")[1]#省份GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来#如何判断字典里面有没有制定的key呢?try:data_dict[year].append([country,GDP])except KeyError:data_dict[year]=[]data_dict[year].append([country,GDP])print(data_dict)

 结果是

 

 上图就是1999年的数据

3.完成GDP动态图表绘制

 

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *#读取文件
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="ANSI")
data_lines=f.readlines()
#关闭文件
f.close()
#删除第一行数据
data_lines.pop(0)#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:year=int(line.split(",")[0])#年份country=line.split(",")[1]#省份GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来#如何判断字典里面有没有制定的key呢?try:data_dict[year].append([country,GDP])except KeyError:data_dict[year]=[]data_dict[year].append([country,GDP])#排序年份
sorted_year_list=sorted(data_dict.keys())
timeline = Timeline()#创建时间线对象
for year in sorted_year_list:data_dict[year].sort(key=lambda element:element[1],reverse=True)#取出本年份前八名的国家year_data=data_dict[year][:8]x_data=[]y_data=[]for country_gdp in year_data:x_data.append(country_gdp[0])#x轴添加国家y_data.append(country_gdp[1]/100000000)#y轴添加GDP数据,单位为亿元#构建柱状图bar=Bar()bar.add_xaxis(x_data)bar.add_yaxis("GDP亿元",y_data,label_opts=LabelOpts(position="right"))#反转x轴,y轴bar.reversal_axis()#创建时间线对象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("1960——2019全球GDP前八国家.html")

结果是

 存在问题:我们希望第一行是GDP数量最多的,然后依次递减

解决方法很简单:把x轴和y轴上的数据都反转一下就可以了

    #构建柱状图bar=Bar()x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("GDP亿元",y_data,label_opts=LabelOpts(position="right"))

结果是

 这样就基本没问题了

我们还可以给他:

添加主题类型

from pyecharts.globals import ThemeTypetimeline = Timeline({"theme":ThemeType.LIGHT})#创建时间线对象

结果是

 设置动态标题

#反转x轴,y轴bar.reversal_axis()#设置每一年的图表标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球GDP前八数据"))

 结果是

 四.完整代码

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType#读取文件
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="ANSI")
data_lines=f.readlines()
#关闭文件
f.close()
#删除第一行数据
data_lines.pop(0)#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:year=int(line.split(",")[0])#年份country=line.split(",")[1]#省份GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来#如何判断字典里面有没有制定的key呢?try:data_dict[year].append([country,GDP])except KeyError:data_dict[year]=[]data_dict[year].append([country,GDP])#排序年份
sorted_year_list=sorted(data_dict.keys())
timeline = Timeline({"theme":ThemeType.LIGHT})#创建时间线对象
for year in sorted_year_list:data_dict[year].sort(key=lambda element:element[1],reverse=True)#取出本年份前八名的国家year_data=data_dict[year][:8]x_data=[]y_data=[]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()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前八数据"))#创建时间线对象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("1960——2019全球GDP前八国家.html")

五.数据集

链接:https://pan.baidu.com/s/19jS5vGrsQptp7dFTbWzYKA 
提取码:1234

 

相关内容

热门资讯

阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...