pyecharts 利用grid显示多张曲线图,为什么生成的曲线只覆盖第一张图

最近在学习pyecharts,发现利用pyecharts的grid和Line生成5张曲线图,需要竖向排列(
只用grid,不用page),结果发现所有的曲线只覆盖第一张,这是为什么?

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这是因为在pyecharts中,Grid组件的pos_bottom参数默认值为0.8,表示曲线图的底部位置为容器高度的80%。当有多张曲线图时,它们会重叠在一起。要解决这个问题,可以将pos_bottom参数设置为一个更大的值,例如1.0,表示曲线图的底部位置占满整个容器高度。

以下是一个示例代码:

from pyecharts.charts import Line, Grid
from pyecharts import options as opts

# 创建数据
x_data = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
y_data1 = [820, 932, 901, 934, 1290, 1330, 1320]
y_data2 = [720, 832, 801, 834, 1190, 1230, 1220]
y_data3 = [920, 1032, 901, 1034, 1390, 1430, 1420]
y_data4 = [620, 732, 601, 734, 1190, 1230, 1220]
y_data5 = [1220, 1332, 1201, 1334, 1790, 1830, 1820]

# 创建Line对象
line1 = Line()
line1.add_xaxis(x_data)
line1.add_yaxis("曲线图1", y_data1)

line2 = Line()
line2.add_xaxis(x_data)
line2.add_yaxis("曲线图2", y_data2)

line3 = Line()
line3.add_xaxis(x_data)
line3.add_yaxis("曲线图3", y_data3)

line4 = Line()
line4.add_xaxis(x_data)
line4.add_yaxis("曲线图4", y_data4)

line5 = Line()
line5.add_xaxis(x_data)
line5.add_yaxis("曲线图5", y_data5)

# 创建Grid对象并设置pos_bottom参数
grid = (Grid()
        .add(line1, grid_opts=opts.GridOpts(pos_bottom="6%"))
        .add(line2, grid_opts=opts.GridOpts(pos_bottom="6%"))
        .add(line3, grid_opts=opts.GridOpts(pos_bottom="6%"))
        .add(line4, grid_opts=opts.GridOpts(pos_bottom="6%"))
        .add(line5, grid_opts=opts.GridOpts(pos_bottom="6%")))

# 渲染图表
grid.render("grid_example.html")

在这个示例中,我们将pos_bottom参数设置为"6%",使得每张曲线图都占满整个容器高度的6%,从而避免曲线图重叠的问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7732302
  • 这篇博客也不错, 你可以看下pyecharts可视化展示之绘制漏斗图、散点图、K线图学习
  • 除此之外, 这篇博客: 使用pyecharts绘制条形图、折线图、饼图。中的 使用pyecharts绘制条形图、折线图、饼图。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    import pandas as pd
    import numpy as np
    from pyecharts import options as opts
    from pyecharts.charts import Bar
    
    df = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
    t = df.dropna(subset=["death_data"])
    time = t['death_data']
    
    # 将数据类型转换为日期类型
    t['date'] = pd.to_datetime(t['death_data'])
    
    # 将date设置为index
    df = t.set_index('date')
    
    count = t['date'].groupby(t['date'].dt.year).agg('count')
    
    
    
    bar = (
        Bar(init_opts=opts.InitOpts(width='1500px', height='400px'))
            .add_xaxis(count.index.tolist())
            .add_yaxis("各年份被淘汰的公司总数对比", count.values.tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title="Bar-各年份被淘汰的公司总数对比"))
            # .set_colors("red")  # 柱子的颜色
            .set_global_opts(
            # x轴
            xaxis_opts=opts.AxisOpts(
                name='年份',
                name_location='middle',
                name_gap=20,
                #  x轴名称的格式配置
                name_textstyle_opts=opts.TextStyleOpts(
                    font_family='Times New Roman',
                    font_size=14,
                ),
            ),
            # y轴
            yaxis_opts=opts.AxisOpts(
                name='年份淘汰总数',
                name_location='middle',
                name_gap=30,
                name_textstyle_opts=opts.TextStyleOpts(
                    font_family='Times New Roman',
                    font_size=14,
                    color='black',
                ),
                axistick_opts=opts.AxisTickOpts(
                    #                     is_show=False,  # 是否显示
                    is_inside=True,  # 刻度线是否在内侧
                ),
                axislabel_opts=opts.LabelOpts(
                    font_size=12,
                    font_family='Times New Roman',
                ),
            ),
            # 设置标题
            title_opts=opts.TitleOpts(
    
                title='各年份淘汰总数',
    
            )
        )
    )
    bar.render()
    

    在这里插入图片描述

    import pandas as pd
    from pyecharts import options as opts
    import pyecharts.options as opt
    
    from pyecharts.charts import Line
    
    excel_data = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
    
    
    notnull = excel_data.dropna(subset=["death_data"])
    
    
    city_beijing = notnull.loc[notnull['com_addr'] == '北京']
    city_shanghai = notnull.loc[notnull['com_addr'] == '上海']
    city_shenzhen = notnull.loc[notnull['com_addr'] == '深圳']
    
    city_beijing_count =  city_beijing[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
    city_shanghai_count =  city_shanghai[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
    city_shenzhen_count =  city_shenzhen[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
    
    
    (
        Line(init_opts=opt.InitOpts(width='1500px', height='400px'))
        .add_xaxis(xaxis_data=city_beijing_count['cat'].tolist())
        .add_yaxis(series_name='北京', y_axis=city_beijing_count.values[:,1:].tolist())
        .add_yaxis(series_name='上海', y_axis=city_shanghai_count.values[:,1:].tolist())
        .add_yaxis(series_name='深圳', y_axis=city_shenzhen_count.values[:,1:].tolist())
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                name='行业',
                name_location='middle',
                name_gap=20,
                #                 x轴名称的格式配置
                name_textstyle_opts=opts.TextStyleOpts(
                    font_family='Times New Roman',
                    font_size=14,
                ),
            ),
            yaxis_opts=opts.AxisOpts(
                name='淘汰公司总数',
                name_location='middle',
                name_gap=30,
                name_textstyle_opts=opts.TextStyleOpts(
                    font_family='Times New Roman',
                    font_size=14,
                ),
                axistick_opts=opts.AxisTickOpts(
                    is_inside=True,  # 刻度线是否在内侧
                ),
                axislabel_opts=opts.LabelOpts(
                    font_size=12,
                    font_family='Times New Roman',
                ),
            ),
    
        )
    ).render("zhexian.html")
    

    在这里插入图片描述

    import pandas as pd;
    import numpy as np;
    
    from pyecharts import options as opts
    
    from pyecharts.charts import Pie, Grid
    
    excel_data = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
    
    shanhai_data = excel_data.loc[excel_data['com_addr'] == '北京']
    
    data = shanhai_data[['com_addr', 'cat']].groupby(by=['cat'], as_index=False).agg('count')
    
    
    x_data = data['cat']
    y_data = data.values[:, 1:].tolist()
    
    pie = (
        Pie(init_opts=opts.InitOpts(width='800px', height='600px'))
            .add("", [list(z) for z in zip(x_data, y_data)])
    
            .set_global_opts(
            # 设置标题
            title_opts=opts.TitleOpts(title="饼图"),
            # 设置图例位置
            legend_opts=opts.LegendOpts(type_="scroll", pos_left="right", orient="vertical")
    
        )
            #      模板变量有 {a}、{b}、{c}、{d},分别表示系列名,数据名,数据值,百分比。{d}数据会根据value值计算百分比
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"), center=["45%", "50%"])
    )
    
    pie.render("s_pie.html")
    

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^