rainman0829
. 叁拾陆
采纳率0%
2021-06-11 16:20 浏览 33

pyecharts画图 纵坐标出现重影

生成了几十万张图,但是并不是总会出现这种情况,大约每四五张就会有一张纵坐标出现这种情况,不知道是什么问题。



<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+":生成完毕...")
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答 默认 最新

  • QA_Assistant 有问必答小助手 2021-06-16 16:48

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

    ​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    点赞 评论 复制链接分享

相关推荐