gpt4 book ai didi

python - hvplot.heatmap 与 Pandas 数据框 : How to specify value dimensions?

转载 作者:行者123 更新时间:2023-12-03 21:20:00 31 4
gpt4 key购买 nike

我有一个简单的数据框,其中包含我想使用 hvpolot.heatmap 进行可视化的列和行。
我可以做一些非常相似的事情:

df.style.background_gradient(cmap='summer')
.. 在 Jupyter 中,看起来像:
enter image description here
数据框非常简单:
> df.index
Index(['ackerland', 'friedhof', 'gartenland', 'gehoelz', 'golfplatz',
'gruenland', 'heide', 'kleingarten', 'laubholz', 'mischholz', 'moor',
'nadelholz'],
dtype='object')
> df.columns
Index(['hiking', 'biking', 'walking', 'sport', 'friends', 'family', 'picnic'], dtype='object')
但是当我这样做时:
>import hvplot.pandas
>df.hvplot.heatmap(colorbar=True)
ValueError: Dimensions must be defined as a tuple, string, dictionary or Dimension instance, found a NoneType type.```
这也不起作用:
>df.hvplot.heatmap(x=df.index, y=df.columns, colorbar=True)
ValueError: The truth value of a Index is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我已经阅读了大多数关于此的文档,但仍然不完全了解如何在 hvplot/holoviews/bokeh 中为 Pandas 数据框指定值维度:
  • Bokeh Heatmap Doc
  • Pandas Dataframe Plot Doc
  • hvplot plot doc
  • hvplot intro with pd.df
  • oloviews heatmap doc

  • [编辑] 添加 feature request

    最佳答案

    1) 如果您的数据是您拥有的宽格式,以类别为索引,以列为值,如下所示:

    +--------------------------+
    | colA colB colC |
    +--------------------------+
    | group1 10 5.000 1.200 |
    | group2 12 3.000 4.500 |
    | group3 14 1.200 2.300 |
    +--------------------------+

    那你就做df.heatmap.hvplot()使用 hvplot >= 0.5:
    import pandas as pd
    import holoviews as hv
    import hvplot.pandas
    hv.extension('bokeh')

    df = pd.DataFrame({
    'colA': [10, 12, 14],
    'colB': [5, 3.0, 1.2],
    'colC': [1.2, 4.5, 2.3]},
    index=['group1', 'group2', 'group3'],
    )

    df.hvplot.heatmap()

    如果您想向热图中添加数据标签,您可以执行以下操作:
    heatmap = df.hvplot.heatmap()

    heatmap * hv.Labels(heatmap)

    2)但是,当您的数据是这样的,其中组只是另一列而不是索引:
    +------------------------------+
    | group colA colB colC |
    +------------------------------+
    | 1 group1 10 5.000 1.200 |
    | 2 group2 12 3.000 4.500 |
    | 3 group3 14 1.200 2.300 |
    +------------------------------+

    然后,您可以使用 df.set_index('group') 将您的组设置为索引(并应用解决方案 1),或 melt您的数据为长格式:
    df_melt = df.melt(id_vars='group')

    融化你的数据后看起来像这样:
    +---+--------+----------+--------+
    | | group | variable | value |
    +---+--------+----------+--------+
    | 0 | group1 | colA | 10.000 |
    | 1 | group2 | colA | 12.000 |
    | 2 | group3 | colA | 14.000 |
    | 3 | group1 | colB | 5.000 |
    | 4 | group2 | colB | 3.000 |
    +---+--------+----------+--------+

    此融合数据的格式为您可以使用 x 和 y 以及 C 关键字 :
    df_melt.hvplot.heatmap(x='group', y='variable', C='value')

    或者您可以 使用融化的(长)数据在 HoloViews 中创建热图 :
    hv.HeatMap(df_melt, kdims=['group', 'variable'], vdims=['value'])

    融合数据的优势在于您现在还可以轻松地向热图添加数据标签:
    heatmap = df_melt.hvplot.heatmap(x='group', y='variable', C='value')
    labels = hv.Labels(data=df_melt, kdims=['group', 'variable'], vdims=['value'])

    heatmap * labels

    将数据标签/值添加到热图的另一种(甚至)更简单的方法是这样的:
    heatmap = df_melt.hvplot.heatmap(x='group', y='variable', C='value')
    heatmap * hv.Labels(heatmap)

    结果图:

    nice heatmap with labels using hvplot or holoviews

    有关 hvplot 中热图的更多信息: https://hvplot.holoviz.org/reference/pandas/heatmap.html

    有关全息 View 中热图的更多信息:
    https://holoviews.org/reference/elements/bokeh/HeatMap.html

    有关全息 View 中(数据)标签的更多信息:
    https://holoviews.org/reference/elements/bokeh/Labels.html

    关于python - hvplot.heatmap 与 Pandas 数据框 : How to specify value dimensions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240460/

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