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

如何在hvplot/HoloViews中创建交互式QQ图?是否有对应功能?

在HoloViews/hvplot中实现交互式QQ图

HoloViews和hvplot本身没有内置原生的QQ图工具,但可以结合scipy.stats的统计计算能力,手动实现交互式QQ图,完全满足你统一使用同一Python库的需求。

实现步骤与代码示例

  1. 导入依赖库
    确保已安装hvplot、holoviews、scipy和pandas,然后导入:

    import numpy as np
    import pandas as pd
    import hvplot.pandas
    import holoviews as hv
    from scipy import stats
    hv.extension('bokeh')  # 启用Bokeh后端以获得交互功能
    
  2. 准备/导入样本数据
    这里用正态分布数据做示例,可替换为你的真实数据集:

    np.random.seed(42)
    sample_data = np.random.normal(loc=0, scale=1, size=1000)
    df = pd.DataFrame({'sample': sample_data})
    
  3. 计算QQ图所需分位数
    利用scipy.stats计算理论分布分位数和样本分位数:

    # 生成排序后的样本分位数
    sample_quantiles = np.sort(df['sample'])
    # 生成对应理论分布的分位数(这里用正态分布,可替换为其他分布)
    theoretical_quantiles = stats.norm.ppf(np.linspace(0.01, 0.99, len(sample_quantiles)))
    # 整理成DataFrame方便hvplot调用
    df_qq = pd.DataFrame({
        'Theoretical Quantiles': theoretical_quantiles,
        'Sample Quantiles': sample_quantiles
    })
    
  4. 绘制交互式QQ图
    用hvplot绘制散点图,并添加y=x参考线增强可读性:

    # 绘制交互式散点图,支持悬停查看数值
    qq_scatter = df_qq.hvplot.scatter(
        x='Theoretical Quantiles',
        y='Sample Quantiles',
        title='Interactive Normal Q-Q Plot',
        hover_cols=['Theoretical Quantiles', 'Sample Quantiles'],
        width=600,
        height=400
    )
    # 添加y=x参考线
    reference_line = hv.Curve([(-4, -4), (4, 4)]).opts(
        color='red',
        line_dash='dashed',
        label='y=x Reference'
    )
    # 组合图形并显示
    interactive_qq_plot = qq_scatter * reference_line
    interactive_qq_plot
    

自定义扩展

  • 若需适配其他分布(如t分布、泊松分布),只需将stats.norm替换为对应分布即可,例如t分布:stats.t(df=5)
  • 可通过hvplot参数调整图形样式,比如点的颜色、大小,标题字体等
  • 生成的图支持Bokeh的所有交互功能:缩放、平移、悬停详情、图例切换等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:17