You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly散点图Y轴高度自适应:根据CODE类别数量自动调整

动态调整Plotly散点图高度适配Y轴类别数量

解决思路

  1. 统计当前筛选后数据中唯一的CODE类别数量
  2. 根据类别数量动态计算图表高度,设置基础高度+每个类别的增量高度,避免类别过少时图表过矮
  3. 保留Y轴dtick=1保证类别间距一致,通过高度适配让不同数量的类别都有合理显示空间

修改后的代码

def chart(df):
    color_discrete_map = {'df1': 'rgb(255,0,0)',
                      'df2': 'rgb(0,255,0)',
                      'df3': '#11FCE4',
                      'df4': '#9999FF',
                      'df5': '#606060',
                      'df6': '#CC6600'}

    # 统计当前唯一的CODE类别数量(筛选后自动更新)
    code_count = len(df['CODE'].unique())
    # 动态计算图表高度:基础高度200(含X轴、边距等固定元素),每个CODE分配30像素,最小高度限制为300避免过矮
    dynamic_height = max(300, 200 + code_count * 30)

    fig = px.scatter(df, x='DATE', y='CODE', color='SOURCE', width=1200,
                     height=dynamic_height, color_discrete_map=color_discrete_map)

    fig.update_layout(xaxis_type='category')

    fig.update_layout(
        margin=dict(l=250, r=0, t=0, b=20),
    )
    fig.update_layout(xaxis=dict(tickformat="%y-%m", tickmode='linear', tick0=0.5, dtick=0.75))

    fig.update_xaxes(ticks="outside",
                     ticklabelmode="period", 
                     tickcolor="black", 
                     ticklen=10, 
                     minor=dict(
                         ticklen=4,  
                         dtick=7*24*60*60*1000,  
                         tick0="2016-07-03", 
                         griddash='dot', 
                         gridcolor='white')
                    )
    
    # 保留Y轴dtick=1保证类别间距一致,无需额外调整间距
    fig.update_layout(yaxis={"dtick":1}, margin={"t":0,"b":0})

关键说明

  • 每次调用chart函数时,code_count会自动根据筛选后的df重新统计,确保高度适配当前选中的类别数量
  • 可根据实际显示需求调整dynamic_height中的参数:比如把每个CODE的增量从30改成40,或者调整最小高度阈值
  • Y轴dtick=1已经固定了类别间的相对间距,通过动态调整整体高度就能让不同数量的类别都清晰显示

内容的提问来源于stack exchange,提问作者user14269252

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:42:45