【问题标题】:How to add horizontal lines as annotations (outside of axes) in matplotlib?如何在matplotlib中添加水平线作为注释(轴外)?
【发布时间】:2018-05-15 19:17:11
【问题描述】:

我正在使用 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()

生成:

但是,我需要在 x 轴和“新生儿”注释之间的绘图上再添加一条黑线。像这样:

【问题讨论】:

  • 不接受道歉。仅仅因为您懒得提供问题的minimal reproducible example,所以现在任何试图回答的人都必须完成所有工作?您认为这就是这里的工作原理吗?
  • 对不起,没想太多。无论如何感谢您的回答。

标签: python matplotlib


【解决方案1】:

一些相关问题:

您需要一条垂直线,但该线需要位于沿 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()

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多