matplotlibやseabornで1次元散布図(horizontal)をふたつ描いて、共通の点の間に線を引きたい


seabornのviolinPlotで何とかなりますか？  
以下の図を作るために、アドバイスいただけると助かります。

#入力データと作図結果  
入力データ:  
dataA=[2,4,6,8,10,12,14]  
dataB=[3,6,9,12,15]

条件:  
① 横線に〇をプロットする。以下の図は正確ではありません。水平線上にマーク〇をプロットする。  
② 縦棒「|」を表示する。6と12が共通の値。

作図結果:  
dataA ――〇―――〇―――〇―――〇―――〇―――〇―――〇  
縦棒 | |  
dataB ――――〇―――――〇―――――〇―――――〇―――――〇

（次の行は不要です。説明用です。6と12の文字表示もできると、助かります。）  
１ ２ ３ 4 5 6 7 0 9 0 1 2 3 4 5

# 次のコードは、めちゃくちゃです。

[code]

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-1, 1, 100)
    y = np.sin(x)
    plt.plot(x, y)
    
[/code]




> 縦棒を短くしたいです。
[code]

    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib import collections as mc
    import seaborn as sns
    
    dataA = [2, 4, 6,  8, 10, 12, 14]
    dataB = [3, 6, 9, 12, 15]
    
    data = [['dataA', v] for v in dataA] + [['dataB', v] for v in dataB]
    df = pd.DataFrame(data, columns=['data', 'value'])
    
    plt.figure(1, figsize=(8, 2.4))
    ax = sns.stripplot(data=df, x='value', y='data', jitter=False, size=15)
    hc = mc.LineCollection(
      [[[0, n], [i, n]] for n, i in enumerate(map(max, (dataA, dataB)))],
      colors='k', linewidths=2)
    ax.add_collection(hc)
    lc = mc.LineCollection(
      [[[i, 0], [i, 1]] for i in set(dataA).intersection(dataB)],
      colors='red', linewidths=2)
    ax.add_collection(lc)
    
    ax.set_xlabel(''); ax.set_ylabel('')
    for p in ('right', 'left', 'top', 'bottom'):
      ax.spines[p].set_visible(False)
    ax.tick_params(
      left=False, bottom=False, labelleft=True, labelbottom=False)
    
    for n, l in enumerate((dataA, dataB)):
      for i in l:
        ax.text(
          x=i+0.1, y=n-0.05, s=i,
          horizontalalignment='left', verticalalignment='bottom',
          size='medium', color='k')
    
    plt.show()
    
[/code]

[![](https://i.stack.imgur.com/MzN43.png)](https://i.stack.imgur.com/MzN43.png)

