Python实现动态柱状图的绘制

2022-12-29 172阅读 0评论

?=一.基础柱状图

如图

Python实现动态柱状图的绘制

演示

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(),#加名称 visualMap_opts=VisualmapOpts(#加范围显示 is_show=True ) ) #绘图 bar.render("基础柱状图.html")

结果是

Python实现动态柱状图的绘制

Python实现动态柱状图的绘制

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

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

结果是

Python实现动态柱状图的绘制

小结

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

二.基础时间线柱状图

Python实现动态柱状图的绘制

演示

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(),#加名称 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(),#加名称 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(),#加名称 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")

结果是

Python实现动态柱状图的绘制

Python实现动态柱状图的绘制

Python实现动态柱状图的绘制

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

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

代码

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

结果是

Python实现动态柱状图的绘制

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

三.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)

结果是

Python实现动态柱状图的绘制

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

2.完成图表所需数据

Python实现动态柱状图的绘制

Python实现动态柱状图的绘制

#将数据转为字典存储格式为: #{ 年份:[[国家, 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)

结果是

Python实现动态柱状图的绘制

Python实现动态柱状图的绘制

上图就是1999年的数据

3.完成GDP动态图表绘制

Python实现动态柱状图的绘制

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")

结果是

Python实现动态柱状图的绘制

存在问题:我们希望第一行是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"))

结果是

Python实现动态柱状图的绘制

这样就基本没问题了

我们还可以给他:

添加主题类型

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

结果是

Python实现动态柱状图的绘制

设置动态标题

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

结果是

Python实现动态柱状图的绘制

四.完整代码

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")

以上就是Python实现动态柱状图的绘制的详细内容,更多关于python动态柱状图的资料请关注云初冀北其它相关文章!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,172人围观)

还没有评论,来说两句吧...