使用不同大小的列表的热图

时间:2020-05-30 23:48:18

标签: python pandas matplotlib seaborn

我想使用JaroWinkler相似度比较两个大小不同的列表。 List_1具有5个元素,它来自列数据帧,例如

List_1=df['Movements'].tolist()

List_1=['surrealism', 'futurism', 'impressionism', 'realism', 'neorealism']

list_27个元素:

list_2=['romantisme', 'surrealisme', 'realisme','creativité', 'liberté', 'poete','cubism','metaphysique'] 

要计算JaroWinkler距离,我使用以下函数:

jarowinkler = JaroWinkler()

我将其应用于df.Movements列,如下所示:

for m in all_mov:
     df[m] = df.Movements.apply(lambda x: jarowinkler.similarity(x, m))
    np.where(df[m] > 0.1, df[m], np.nan)

我想使用seaborn热图来绘制仅jarowinkler.similarity大于0.1的结果。

mask = np.zeros_like(df.Movements)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    f, ax = plt.subplots(figsize=(10, 5))
    ax = sns.heatmap(df['Movements'], mask=mask, square=False)

但是,我只能看到一个正方形的结果(即只能看到list_2中前5个元素的结果。 我做错什么了吗(例如考虑热图未平方)?还有其他方法可以可视化大小不同的列表之间的相似性吗? 咨询将非常受欢迎。

1 个答案:

答案 0 :(得分:1)

您可以轻松地做到:

for m in all_mov:
    #compute similarity
    df[m] = df.Movements.apply(lambda x: jarowinkler.similarity(x, m))

    # filter out low similarity scores
    df[m] = np.where(df[m] > 0.1, df[m], np.nan)

sns.heatmap(data=df.set_index('Movements')[all_mov])

这会给你这样的东西:

enter image description here