【问题标题】:Annotating axvline in matplotlib在 matplotlib 中注释 axvline
【发布时间】:2022-01-05 23:04:17
【问题描述】:

我正在使用 seaborn 和子图从我的 pandas 数据框 df1df2 中绘制一些数字,并想添加一条带注释的线,显示子图上每个数据框的列的中值。

我可以在下面的代码中使用axvline 在中位数上绘制一条线,但不知道如何注释绘制的线以显示实际的中位数:

df1median = df1['values'].median()
df2median = df2['values'].median()

fig, axes = plt.subplots(1,2)
sns.kdeplot(data=df1, x='values', ax=axes[0])
axes[0].axvline(df1median)

sns.kdeplot(data=df2, x='values', ax=axes[1])
axes[1].axvline(df2median)

我可以使用plt.text 手动注释并手动设置位置,但想要一种方法来直接注释每个子图上绘制的轴线。这可能吗?

【问题讨论】:

标签: python pandas matplotlib


【解决方案1】:

您可以使用 x 轴变换来给出数据坐标中的 x 位置和轴坐标中的 y 位置(0 在底部,1 在子图顶部):

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

df1 = pd.DataFrame({'values': np.random.normal(.1, 2, 500).cumsum()})
df2 = pd.DataFrame({'values': np.random.normal(.1, 3, 1000).cumsum()})

fig, axes = plt.subplots(ncols=2, figsize=(12, 4))
for df, ax in zip([df1, df2], axes):
    sns.kdeplot(data=df, x='values', ax=ax)
    dfmedian = df['values'].median()
    ax.axvline(dfmedian, color='r', ls=':')
    ax.text(dfmedian, 0.99, 'median', color='r', ha='right', va='top', rotation=90,
            transform=ax.get_xaxis_transform())
plt.tight_layout()
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2016-04-14
    • 2022-01-16
    • 2012-06-19
    相关资源
    最近更新 更多