2

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

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

问题是我知道 20 的值是 x 轴,但我不知道 y 轴的值,它似乎是“匿名的”。我试图用点(无,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)


没有特定数据点的当前图: 顶部没有特定数据点的小提琴图

4

1 回答 1

2

您需要在小提琴图上使用数据点的值覆盖散点图
这基本上是将散点图放在小提琴图的顶部,这可以使用 * 符号来完成。

这里的 y 轴看起来是“匿名的”,但关键在于它实际上有值 '',所以它是一个空字符串。
所以如果你想绘制值 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


结果图:
具有 1 个异常数据点的散点图的小提琴图

于 2019-12-16T13:56:47.230 回答