diff --git a/visualisation/BivariateSpecificity.py b/visualisation/BivariateSpecificity.py
new file mode 100755
index 0000000000000000000000000000000000000000..5c6e642dcdfb561d78f65ad846efa754c7cfcb28
--- /dev/null
+++ b/visualisation/BivariateSpecificity.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+
+from GEODE import tabular
+from color import qualitative
+import matplotlib.pyplot as plot
+import seaborn
+import sys
+
+def specificity2D(inputTSV, outputPNG):
+    specificities = tabular(inputTSV)
+    ax = seaborn.catplot(
+            data=specificities, x='auteur', y='Specificité', col='domaine',
+            hue='lemme', kind='bar', zorder=3, palette=qualitative)
+    ax.despine(left=True)
+    ax.set_xlabels('')
+    ax.set_titles('{col_name}')
+    ax.tick_params(axis='x', rotation=45)
+    ax.tick_params(axis='y', left=False)
+    for col in specificities['domaine'].unique():
+        ax.axes_dict[col].grid(axis='y', zorder=0)
+    plot.savefig(outputPNG, dpi=300, bbox_inches='tight')
+
+if __name__ == '__main__':
+    specificity2D(*sys.argv[1:])