将一个特定的数据点标记添加到箱线图或小提琴图中(使用 holoviews / hvplot)

Add one specific datapoint marker to boxplot or violinplot (using holoviews / hvplot)

我在数据框中绘制了 1 列的小提琴图。
现在我想展示一个特定数据点(异常值)与小提琴图相比的位置。

下面我创建了一些示例数据,我将绘制 1 个特定的异常值,例如一个值为 20 的数据点。
如何将这个带有标记的数据点添加到我的绘图中?

问题是我知道20是x轴的值,但是我不知道y轴的值,好像是'anonymous'。我试图用点 (None, 20) 叠加散点图,但那没有用。

示例代码:

# import libaries
import numpy as np
import pandas as pd
import hvplot
import hvplot.pandas
import holoviews as hv
hv.extension('bokeh')

# create sample_data
sample_data = np.random.poisson(lam=50, size=100)
df = pd.DataFrame(sample_data, columns=['col1'])

# create violin plot with hvplot:
violin_plot = df.hvplot.violin(ylim=(-5, 100), invert=True)

# or create it with holoviews:
violin_plot = hv.Violin(df, vdims=['col1'])
violin_plot.opts(ylim=(-5, 100), invert_axes=True, width=500)


没有特定数据点的当前绘图:

您需要 overlay 一个散点图,其中包含小提琴图上数据点的值
这基本上是将散点图放在小提琴图的顶部,这可以用 * 符号来完成。

这里的y轴看起来'anonymous',关键是它实际上是有值'',所以它是一个空字符串。
所以如果你想绘制值 20,那么你的数据点是 ('', 20).


解决方案代码:

# x-axis is an empty string, so create a scatter plot of 1 datapoint with value ('', 80)
scatter_point = hv.Scatter(('', 20)).opts(color='red', size=10)

# put your scatter plot with 1 datapoint on top of your violin plot using the * symbol
violin_plot * scatter_point


结果图: