您可以使用 HoloViews 或 hvplot 为每个类别的箱线图着色。
三种可能的解决方案是:
import numpy as np
import pandas as pd
import holoviews as hv
import hvplot
import hvplot.pandas
df = pd.DataFrame({
'total_time': np.random.randint(0, 3, 100),
'customer': np.random.randint(0, 5, 100),
'amount': np.random.rand(100)
})
1)在您的数据框上使用.hvplot()如下:
df.hvplot.box(y='amount', by=['total_time', 'customer'], color='customer')
2)或使用.opts(box_color='your_variable')并且只使用全息视图:
# you can create your plot like this:
hv.BoxWhisker(df, kdims=['total_time', 'customer'], vdims=['amount']).opts(box_color='customer')
# or you can create your plot like this:
hv.Dataset(df).to.box(['total_time', 'customer'], 'amount').opts(box_color='customer')
这导致以下情节,在这种情况下,每个客户都有自己的颜色:
3)如果你有分类变量,除了 box_color 你还必须用关键字 cmap 指定一个颜色图:
df = pd.DataFrame({
'total_time': np.random.choice(['A', 'B', 'C'], 100),
'customer': np.random.choice(['a', 'b', 'c'], 100),
'amount': np.random.rand(100)
})
df.hvplot.box(
y='amount',
by=['total_time', 'customer'],
color='customer',
cmap='Category20',
legend=False,
)
hv.BoxWhisker(
df,
kdims=['total_time', 'customer'],
vdims=['amount']
).opts(
box_color='customer',
cmap='Category20',
)