Seaborn或Matplotlib的语义差异图

Hmm*_*mmm 1 python matplotlib seaborn

是否可以使用Seaborn或Matplotlib创建语义差异图?我无法在文档和这里找到任何暗示.

语义差异图:

在此输入图像描述

我在考虑线图,但是如何映射第二个y轴值?

如果这是可能的,怎么样?

谢谢你的帮助!

Ral*_*lph 5

让我们首先使用一个OrderedDict来存储我们将要绘制的属性:

from collections import OrderedDict
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import numpy as np

dict = OrderedDict([('Wholesome', -2), ('Unique', -1), ('Established', 2), ('Traditional', 1)])
opposites = ('Exotic', 'Standard', 'New', 'Contemporary')
Run Code Online (Sandbox Code Playgroud)

通过这个设置,我们可以开始绘图.让我们定义我们的图形和轴,并制作一个简单的数据散点图:

fig, ax1 = plt.subplots(1, 1)

ax1.plot(dict.values(), np.r_[:len(dict)], marker='o')
Run Code Online (Sandbox Code Playgroud)

好的,好的,我们正在路上.接下来是将yticks设置为我们在字典中设置的属性(虽然我们在这里让我们确保我们只在x轴刻度上使用整数).

ax1.set_yticks(np.r_[:len(dict)])
ax1.set_yticklabels(dict.keys())
ax1.xaxis.set_major_locator(MaxNLocator(integer=True))
Run Code Online (Sandbox Code Playgroud)

接下来,让我们在情节的"另一面"设置相反的属性.让我们设置一个双轴来帮助我们解决这个问题.

ax2 = ax1.twinx()
Run Code Online (Sandbox Code Playgroud)

最后,让我们标记我们的双轴并确保配对属性垂直排列.

ax2.set_ylim(ax1.get_ylim())
ax2.set_yticks(np.r_[:len(dict)])
ax2.set_yticklabels(opposites)
Run Code Online (Sandbox Code Playgroud)

调用fig.tight_layout()应确保y轴标签可见.所有这些一起给了我以下情节:

在此输入图像描述