在使用pyecharts构建带有时间线的柱状图的时候,发现最终图表的右侧,有所有Y轴(未反转前是x轴)的标签信息堆叠。这种情况怎么解决?是在timeline模块里设置,还是bar里设置参数取消右侧标签显示呢?
附上代码~
"""
动态柱状图,显示从1960年开始前8个国家的GDP
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
# 读取文件数据,这个文件数据比较特别,是ANSI编码的。
f_p = open('C:/python/visual/1960-2019全球GDP数据.csv', 'r', encoding='ANSI')
data = f_p.readlines() # 按行读取数据
f_p.close()
# 删除第一行数据
data.pop(0)
# 构建柱状图所需要数据
# {年份:[[国家,GDP],[国家,GDP],[国家,GDP],...],...年份:[[国家,GDP],[国家,GDP],[国家,GDP]]}
data_dict = {}
for line in data:
year = int(line.split(',')[0]) # 年份
country = line.split(',')[1] # 国家
gdp = float(line.split(',')[2]) # gdp
# 如何判断字典里是否有指定key值,用来解决年份不存在,从1960到1961这个情况
# 已经有年份,只要继续追加
# 没有的年份,需要新建,若没有新建,会出现KeyError错误
try:
data_dict[year].append([country, gdp])
except KeyError:
data_dict[year] = []
data_dict[year].append([country, gdp])
# 创建时间线,并设置主题
timeline = Timeline(
{"theme": ThemeType.LIGHT}
)
# 将字典中的年份按顺序排列,keys()获取字典key值方法
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:
# 利用sort排序
data_dict[year].sort(key=lambda element: element[1], reverse=True)
# 取出本年份前8名的国家
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 = x_data[::-1]
x_data.reverse()
bar.add_xaxis(x_data)
# y_data = y_data[::-1]
y_data.reverse()
bar.add_yaxis("GDP(亿)", y_data,
label_opts=LabelOpts(position="right"))
bar.set_global_opts(
xaxis_opts=AxisOpts(splitline_opts=SplitLineOpts(is_show=False)),
yaxis_opts=AxisOpts(splitline_opts=SplitLineOpts(is_show=False)),
title_opts=TitleOpts(
title=f"{year}年全球GDP前8国家"
)
)
bar.reversal_axis()
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前8国家.html")
运行结果截图:
