1.基础柱状图的构建
打开浏览器,你会发现这是一个动态图,会随着时间变化而变化
具体效果大家可以看我主页有个动态柱状图视频
本质上来说,是和我们构建一个折线统计图差不多的,只是把对象换了一下
如果我们需要反转x和y轴,可以输入以下代码
# 反转x轴和y轴 bar.reversal_axis()
鼠标滑动即可看到具体数据
就这样数值标签变到了右边
# 演示基础柱状图的开发 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("基础柱状图.html")
总结:
·通过Bar()构建一个柱状图对象
·和折线图一样,通过add_xaxis()和add_yaxis()添加x和y轴数据
·通过柱状图对象的:reversal_axis(),反转x和y轴
·通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示
2.基础时间线柱状图
这个就是一个时间线
其实就是给点1一个柱状图,点2一个柱状图,随着点1到点2,柱状图也改变
时间线就是在x轴上提供很多个点,每一个点都是一个图表
这样我们就得到了一个基础的时间线
自动播放
自动播放无法放视频就不演示了,大家自行探索
别人的是红色的,而我的是蓝色的,那么怎么改颜色呢
如何设置主题
from pyecharts.charts import Bar,Timeline from pyecharts.options import LabelOpts from pyecharts.globals import ThemeTypebar1 = Bar() bar1.add_xaxis(["中国","美国","英国"]) bar1.add_yaxis("GDP",[30,20,20],label_opts=LabelOpts(position="right")) bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中国","美国","英国"]) bar2.add_yaxis("GDP",[50,50,10],label_opts=LabelOpts(position="right")) bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中国","美国","英国"]) bar3.add_yaxis("GDP",[70,60,55],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") # 绘图是用时间线对象绘图,而不是bar对象了 timeline.render("基础时间线柱状图.html") # 自动播放设置 timeline.add_schema(play_interval=1000, # 自动播放的时间间隔,单位毫秒is_timeline_show=True, # 是否在自动播放的时候,显示时间线is_auto_play=True, # 是否自动播放is_loop_play=True # 是否循环自动播放 )
3.GDP动态柱状图绘制
列表的sort方法
就是将元素传入函数中,然后看他返回什么,将返回值作为排序的依据,比如这个返回了每一个元素的下标1(下标0就是第一个字母),就是告诉我们按照每一个元素的下标1来排序
数据处理
这是一个数据例子,我们通过记事本将其打开
发现是一个由逗号分隔的数据
注意看它的格式不是UTF-8而是ANSI,ANSI就是根据我们操作系统默认的语言版本来的,默认的中文编码是GB2312
这个gdp它里面有的数据太大,所以使用科学计数法,我们要把科学计数法给他强制转换成float,也就是浮点数
gdp = float(line.split(",")[2])
就像这样
当你定义一个空字典,取字典运行会报错
如果字典里面有这个key,就不会报错
写一点检查运行一下
绘图
因为数据过多,我们可以通过for循环去循环我们的字典,然后每一年在循环里面都构建出来一个bar,一个柱状图的对象是不是就ok了
字典是无序的,我们需要去排序它
由于这一段不需要我们制定一个判断标准,所以使用sorted也可以
观察这个我们想办法把它设置成最高的在上面
x_data.reverse() y_data.reverse()
只需要这样就可以把x轴数据反转,y轴数据反转
那么直接看代码!
# 演示第三个图表,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="GB2312") data_lines = f.readlines() # 关闭文件 f.close() # 因为第一行数据是名字,没有用,所以要删除第一条数据 data_lines.pop(0) # 将数据转换为字典存储,格式为: # {年份:[[国家,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循环每一年的数据。基于每一年的数据,创建每一年的bar对象 # 在for中,将每一年的bar对象添加到时间线中 for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1],reverse=True)# 取出本年份前八名的国家year_data = data_dict[year][0: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_auto_play=True,is_loop_play=False ) # 绘图 timeline.render("1960-2019全国GDP前八国家.html")
具体的结果已经上传至主页,大家感兴趣可以去看看。