生成了几十万张图,但是并不是总会出现这种情况,大约每四五张就会有一张纵坐标出现这种情况,不知道是什么问题。
<strong>本图使用的是下文中的type1</strong>
def create_mixed_line_and_bar(type, title, x_list, data_list, data_unit1, data_unit2 = None):
"""
:param type: 1-折线用于表示变化率and单柱状图+单折线 2-折线用于表示变化率and多柱状图+多折线
3-折线表示占比and单柱状图+单折线 4-折线表示占比and多柱状图+多折线
5-折线用于描述另一维度指标(此时data_list中最后一个k-v为折线数据)
:param title: 图表名称
:param x_list: 横坐标内容为时间序列,纵坐标高度为多个(同级)指标的总和,具体各个指标的数值、比例以不同颜色标出
:param data_list: 字典{key1:value1,key2:value2...},构成柱状图的多个不同类型的bar
:param data_unit1: 第一根y轴的数值单位
:param data_unit2: 第二根y轴的数值单位
:return:
"""
c = Bar(init_opts=opts.InitOpts(height="600px",width="900px",theme=ThemeType.MACARONS))
c.add_xaxis(x_list)
if type == 1: # 因为有overlap,所以需要自适应调整刻度范围,是的bar和line都能显示出来
all_rate_list = []
for key in data_list.keys(): # 单柱状图只有一个bar
change_rate_list = [0]
c.add_yaxis(key, data_list[key], bar_width="20%",label_opts=opts.LabelOpts(is_show=True))
for i in range(1,len(data_list[key])):
if data_list[key][i-1] == 0 or data_list[key][i-1] is None or data_list[key][i] is None: # 注意分母不为0
change_rate_list.append(None)
else:
change_rate_list.append(round((data_list[key][i]-data_list[key][i-1])/data_list[key][i-1]*100,2))
all_rate_list.append(change_rate_list)
c.extend_axis(yaxis=opts.AxisOpts(
name="变化率",
type_="value",
min_=int(round((getMinRate(all_rate_list)-(getMaxRate(all_rate_list)-getMinRate(all_rate_list)))/10)*10),
max_=int(round((getMaxRate(all_rate_list)/10)*10)),
interval=10,
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
))
line = (
Line()
.add_xaxis(xaxis_data=x_list)
.add_yaxis(
series_name="增长率",
yaxis_index=1,
y_axis=all_rate_list[0],
label_opts=opts.LabelOpts(is_show=True, formatter=JsCode(
"function(x){console.log(x);return Number(x.data[1]).toFixed(2) + '%';}"
)),
)
)
c.set_global_opts(title_opts=opts.TitleOpts(title=title,# subtitle="数据来源国家统计局",
# pos_left="center",pos_bottom="0px",
# item_gap=2,
# subtitle_textstyle_opts=opts.TextStyleOpts(color="black")
),
legend_opts=opts.LegendOpts(pos_left="right"),
yaxis_opts=opts.AxisOpts(name="单位:" + data_unit1,
# name_location="end",
# name_gap=5,
# # name_rotate=45,
min_=0, # 基本上指标数据都是为正的
max_=int(round(getMaxData(data_list)/10)*10)*2,
interval=10,
))
c.overlap(line)
# 隐去了其余type的代码……
src_path = "./指标-年度-图片生成/"
html_file_name = src_path + title + ".html"
img_file_name = src_path + title + ".png"
# await html_file_name.setDefaultNavigationTimeout(timeout)
try:
make_snapshot(snapshot, c.render(html_file_name), img_file_name)
except Exception as e:
print(e)
make_snapshot(snapshot, c.render(html_file_name), img_file_name)
print(img_file_name+":生成完毕...")
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。