Plotly散点图Y轴高度自适应:根据CODE类别数量自动调整
动态调整Plotly散点图高度适配Y轴类别数量
解决思路
- 统计当前筛选后数据中唯一的
CODE类别数量 - 根据类别数量动态计算图表高度,设置基础高度+每个类别的增量高度,避免类别过少时图表过矮
- 保留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
相关产品推荐
相关产品推荐

