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

如何让hvplot中每个子图拥有独立的X轴缩放比例?

解决同一变量前后阶段X轴共享、不同变量独立的直方图布局问题

你的问题核心是要让同一变量的before和after阶段直方图共享X轴缩放,而不同变量之间的X轴可以独立调整。当前的合并方式会导致同一列的所有子图强制共享X轴,改用分面布局(按变量为行、阶段为列)可以完美解决这个需求。

修改后的代码

import pandas as pd
import hvplot.pandas
from holoviews import opts

df = pd.DataFrame(
    {'stage':['before','before','before','before','after','after','after','after'],
     'variable':['foo','foo','bar','bar','foo','foo','bar','bar'],
     'value':[1,1,2,2,1,1,30,30]})

# 按变量为行、阶段为列绘制直方图,同一变量的子图共享X轴
histograms = df.hvplot.hist(
    y='value',
    row='variable',  # 每行对应一个变量
    col='stage',     # 每列对应一个阶段
    shared_x='row',  # 同一行(同一变量)共享X轴缩放
    shared_y=False,  # Y轴不共享,按需调整
    subplots=True
)

# 设置布局样式,调整子图大小
histograms.opts(
    opts.Histogram(width=300, height=200),
    opts.Layout(align='center')
)

hvplot.show(histograms)

代码说明

  • row='variable':将每个变量分配到单独的行,确保不同变量的子图相互独立。
  • col='stage':将before和after阶段分配到同一行的左右两列,方便对比同一变量的前后变化。
  • shared_x='row':指定同一行(即同一变量)的两个子图共享X轴缩放,这样foo的before和after阶段X轴一致,而bar的X轴可以独立调整到适合自身数值范围的大小。
  • shared_y=False:关闭Y轴共享,让每个直方图的Y轴根据自身数据分布自动调整,避免因数据量差异导致的显示问题。

效果验证

运行代码后,你会看到:

  • foo变量的两个直方图X轴完全一致(因为数值相同),方便对比前后分布。
  • bar变量的before阶段X轴聚焦在2附近,after阶段X轴适配30的数值,两者独立但属于同一变量的对比组,布局清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:25:16