如何在 matplotlib 中添加水平线作为注释(轴外)?

Cia*_*lsh 1 python matplotlib

我正在使用seaborn 和matplotlib 绘制条形图。我想用文字和线条来注释情节。

这是我生成该图的策略(抱歉提供,plot_data但它相当大):

        plt.figure()
        ax = seaborn.barplot(x='cell_line', y='DeltaCt', data=plot_data, hue='time')
        plt.title('Baseline: {}'.format(g))
        plt.ylabel('DeltaCt')
        plt.xlabel('')
        trans = ax.get_xaxis_transform()
        ax.annotate('Neonatal', xy=(0.4, -0.1), xycoords=trans)
        plt.show()
Run Code Online (Sandbox Code Playgroud)

生成: 在此输入图像描述

然而,我需要在 x 轴和“新生儿”注释之间的该图上再画一条黑线。像这样: 在此输入图像描述

Imp*_*est 6

一些相关问题:

这里您需要一条垂直线,但该线需要位于沿 x 轴的数据坐标中。因此您可以使用ax.get_xaxis_transform(). 要使线在轴外可见,请使用clip_on = False.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plot_data = pd.DataFrame({"cell_line": np.random.choice(list("ABCDEFG"), size=150),
                          'DeltaCt' : np.random.rayleigh(5,size=150),
                          "time":np.random.choice([0,96], size=150)})

plt.figure()
ax = sns.barplot(x='cell_line', y='DeltaCt', data=plot_data, hue='time', 
                 order=list("ABCDEFG"))
plt.title('Baseline: {}'.format("H"))
plt.ylabel('DeltaCt')
plt.xlabel('')
trans = ax.get_xaxis_transform()
ax.annotate('Neonatal', xy=(1, -.1), xycoords=trans, ha="center", va="top")
ax.plot([-.4,2.4],[-.08,-.08], color="k", transform=trans, clip_on=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述