gpt4 book ai didi

python - 使用 HoloViews+Bokeh 绘制连接到 HeatMap 的高斯

转载 作者:行者123 更新时间:2023-12-04 08:05:24 27 4
gpt4 key购买 nike

全部
我对 HV 完全陌生(实际上是从昨晚开始)所以要温柔。
我在玩 HV,所以我构建了一个热图,其中 x 和 y 是平均值和标准偏差 (sigma) 的一些值。然后对于平均值和西格玛的每个组合,我计算变异系数(只是西格玛和平均值的比率)。我已经成功做到了。

  • 现在我想要做的是,对于 HeatMap 中的每个单元格,绘制一个对应于标准和均值组合的高斯。我不知道如何做到这一点。有人有想法吗? (如您所见,我尝试过但没有成功。)
  • 其次,我不知道如何更改我的悬停工具以显示一些自定义信息,例如 mean、std 和 cv 而不是 x、y 和 z
  • 第三,如何将此 HV 代码用作 HTML(输出 HTML 文件?)以便将其导入网站?

  • 提前致谢!
    import pandas as pd
    import numpy as np
    import holoviews as hv
    from holoviews import opts
    hv.extension('bokeh')

    # here the mean and std vales are given (hardcoded)
    mu = [-1, 5, 10]
    std = [10, 50, 90]

    # make an empty list to append coefficient of variation
    cov = []

    # calculate the coefficient of variation c_v = std/mu for all combos of std and mu

    for i in range(0, len(mu)):
    for j in range(0, len(std)):
    cov.append(std[j] / mu[i])

    # to place the values of std and mean on a 2D plot, values have to be
    # repeated in a certain way, therefore

    std_rep = np.tile(std, 3)
    mu_rep = np.repeat(mu, 3)

    sigma = std_rep.astype(str)
    mean = mu_rep.astype(str)

    ###heatmap entries per cell have to be strings, like this
    sigma2=['10', '50', '90', '10', '50', '90', '10', '50', '90']
    mean2 = ['-1', '-1', '-1', '5', '5', '5', '10', '10', '10']
    ################################################

    # make heatmap
    heatmap = hv.HeatMap((sigma, mean, cov))



    # declare tap stream with heatmap as source and initial values
    posxy = hv.streams.Tap(source=heatmap, x='sigma', y='mean')

    # Define function to compute histogram based on tap location
    def tap_histogram(x, y):

    x_vals = np.arange(-100, 100, 0.1)
    y_vals = norm(mean, sigma)

    plt.plot(x_vals, y_vals.pdf(x_vals))

    return hv.Curve((x_vals, y_vals.pdf(x_vals)), mean, sigma)



    (heatmap).opts(opts.HeatMap(cmap='RdBu', tools=['hover', 'tap'], colorbar=True,
    width=500, height=500, toolbar='above', clim=(-100,15),
    title ='coefficient of variation',
    fontsize={'xticks': '10pt', 'yticks': '10pt',
    'xlabel': '10pt', 'ylabel': '10pt',
    'title': '15pt'},
    xlabel='STD', ylabel='MEAN'


    ))

    #cmap examples cmpap = 'RdBu', 'Viridis', etc
    # more at http://holoviews.org/user_guide/Colormaps.html

    最佳答案

    感谢 AurelienSciarra,在 https://discourse.holoviz.org/t/plot-a-gaussian-connected-to-the-heatmap-by-tap-option/1867 上回答了这个问题

    import pandas as pd
    import numpy as np
    import holoviews as hv
    from holoviews import opts
    hv.extension('bokeh')
    from bokeh.models import HoverTool
    from holoviews import streams
    # here the mean and std vales are given (hardcoded)
    mu = [-1, 5, 10]
    std = [10, 50, 90]

    # make an empty list to append coefficient of variation
    cov = []

    # calculate the coefficient of variation c_v = std/mu for all combos of std and mu

    for i in range(0, len(mu)):
    for j in range(0, len(std)):
    cov.append(std[j] / mu[i])

    # to place the values of std and mean on a 2D plot, values have to be
    # repeated in a certain way, therefore

    std_rep = np.tile(std, 3)
    mu_rep = np.repeat(mu, 3)

    sigma = std_rep.astype(str)
    mean = mu_rep.astype(str)

    ###heatmap entries per cell have to be strings, like this
    sigma2=['10', '50', '90', '10', '50', '90', '10', '50', '90']
    mean2 = ['-1', '-1', '-1', '5', '5', '5', '10', '10', '10']
    ################################################

    # make heatmap
    heatmap = hv.HeatMap((sigma, mean, cov))



    # declare tap stream with heatmap as source and initial values
    posxy = hv.streams.Tap(source=heatmap, x=10, y=10)

    # Define function to compute histogram based on tap location
    def tap_histogram(x, y):
    points = np.random.normal(int(y), int(x),1000)
    h= hv.Distribution(points).opts(width=500, height=500)
    return h

    hoverCustom = HoverTool(tooltips={'mean':'@x','std':'@y','cv':'@z'})

    heat=(heatmap).opts(opts.HeatMap(cmap='RdBu', tools=[hoverCustom, 'tap'], colorbar=True,
    width=500, height=500, toolbar='above', clim=(-100,15),
    title ='coefficient of variation',
    fontsize={'xticks': '10pt', 'yticks': '10pt',
    'xlabel': '10pt', 'ylabel': '10pt',
    'title': '15pt'},
    xlabel='STD', ylabel='MEAN'


    ))

    tap_dmap = hv.DynamicMap(tap_histogram, streams=[posxy])

    (heat+tap_dmap)

    关于python - 使用 HoloViews+Bokeh 绘制连接到 HeatMap 的高斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66244053/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com