pandas - HoloViews:为 pandas 数据框中的每一列创建箱线图

标签 pandas dataframe bokeh holoviews

我可以使用 Pandas pandas.DataFrame.boxplot() 创建以下箱线图方法:

import pandas as pd
import numpy as np

np.random.seed(1234)
df = pd.DataFrame(np.random.rand(10, 4),
                  columns=['Col1', 'Col2', 'Col3', 'Col4'])

df.plot.box()
plt.show()

enter image description here

尽管如此,如果我尝试使用 HoloViews' BoxWhisker Element 做同样的事情使用 Bokeh 作为后端,它适用于单列:

import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

hv.BoxWhisker(
    data=df['Col1'],
    vdims='Col1'
)

enter image description here

但是当我尝试添加另一列时,我收到以下错误:

hv.BoxWhisker(
    data=df[['Col1', 'Col2']]
)

DataError: None of the available storage backends were able to support the supplied data format. PandasInterface raised following error:

 unsupported operand type(s) for +: 'NoneType' and 'int'

PandasInterface expects tabular data, for more information on supported datatypes see http://holoviews.org/user_guide/Tabular_Datasets.html

我无法理解 Tabular Data 是否有问题HoloViews 可以理解,否则我无法正确应用语法。

最佳答案

我还推荐 James Bednar 的答案,它使用 hvPlot 。 HvPlot 构建在 HoloViews 之上:

import hvplot.pandas
df.hvplot.box()


但是,如果您想在 HoloViews 而不是 hvPlot 中执行此操作,则必须 melt您的数据以获取一列中的所有列名称以及另一列中的所有值。

此代码适用于您的示例数据:

hv.BoxWhisker(df.melt(), kdims='variable', vdims='value')

关于pandas - HoloViews:为 pandas 数据框中的每一列创建箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61757845/

相关文章:

python-3.x - Pandas :删除缺少数据的行

r - 数据帧 R 之间的映射值

python - 多选下拉菜单 Bokeh

python-2.7 - 在 Jupyter/Python 中使用 bokeh 绘制交互式饼图

python - 从切片更新多列时 df.fillna() 不起作用

Pandas - 按工作日过滤数据

python - 检查 Pandas 数据框是数据框还是系列?

python - 如何根据另一个数据框中的条件在数据框中创建新列?

python - Bokeh:无法为日期时间 x 轴显示 Vbar

python - Pandas 有条件地用行的均值/中值替换单元格值