如何在hvplot/HoloViews中创建交互式QQ图?是否有对应功能?
在HoloViews/hvplot中实现交互式QQ图
HoloViews和hvplot本身没有内置原生的QQ图工具,但可以结合scipy.stats的统计计算能力,手动实现交互式QQ图,完全满足你统一使用同一Python库的需求。
实现步骤与代码示例
导入依赖库
确保已安装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后端以获得交互功能准备/导入样本数据
这里用正态分布数据做示例,可替换为你的真实数据集:np.random.seed(42) sample_data = np.random.normal(loc=0, scale=1, size=1000) df = pd.DataFrame({'sample': sample_data})计算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 })绘制交互式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
相关产品推荐
相关产品推荐

