在 ridgeplots 中绘制一个点

plot a point within ridgeplots

具有以下数据框:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import joypy

sample1 = np.random.normal(5, 10, size = (200, 5))
sample2 = np.random.normal(40, 5, size = (200, 5))
sample3 = np.random.normal(10, 5, size = (200, 5))

b = []

for i in range(0, 3):
        a = "Sample" + "{}".format(i)
        lst = np.repeat(a, 200)
        b.append(lst)
b = np.asarray(b).reshape(600,1)

data_arr = np.vstack((sample1,sample2, sample3))
df1 = pd.DataFrame(data = data_arr, columns = ["foo", "bar", "qux", "corge", "grault"])

df1.insert(0, column="sampleNo", value = b)

我能够生成以下脊线图:

fig, axes = joypy.joyplot(df1, column = ['foo'], by = 'sampleNo', 
                      alpha=0.6,
                      linewidth=.5, 
                      linecolor='w',
                      fade=True)

现在,假设我有以下向量:

 vectors = np.asarray([10, 40, 50])

如何将这些点中的每一个绘制到密度图中?例如,在样本 1 的分布图上,我想在 10 上有一个点(或线); 40 上的样本 2,等等

我试过使用 axvline,我有点希望它能工作,但运气不好:

for ax in axes:
    ax.axvline(vectors(ax))

我不确定我想要的是否完全可行...

你几乎找到了正确的方法。

axes 按顺序包含 4 个轴对象:从上到下堆叠的三个地块和其他 3 个所在的大地块。所以,

for ax, v in zip(axes, vectors):
    ax.axvline(v)

zip() 只会压缩到较短的迭代器,即 vectors。因此,它将 vectors 中的每个点与堆叠图中的每个轴相匹配。