【问题标题】:Annotation changing the plot?注释改变情节?
【发布时间】:2018-02-24 07:01:15
【问题描述】:

通常当我绘制一些分布时,我喜欢插入辅助线以显示额外信息,例如均值:

plt.figure(figsize=(15, 5))
h = r1['TAXA_ATUAL_UP'].mean()
plt.axvline(h, color='k', linestyle='dashed', linewidth=2)
print(h) # 692.6621026418171
plt.annotate('{0:.2f}'.format(h), xy=(h+100, 0.02), fontsize=12)

sns.distplot(r1['TAXA_ATUAL_UP'].dropna())
sns.distplot(r1[r1['REMOTO'] == 1]['TAXA_ATUAL_UP'].dropna(), hist=False, label='Y = 1')
sns.distplot(r1[r1['REMOTO'] == 0]['TAXA_ATUAL_UP'].dropna(), hist=False, label='Y = 0')

最近,使用相同的代码绘制其他数据,我得到了一个奇怪的结果。基本上,我注意到h 的值很大,结果是情节急剧减少:

plt.figure(figsize=(15, 5))
h = r1['TAXA_ATUAL_DOWN'].mean()
plt.axvline(h, color='k', linestyle='dashed', linewidth=2)
print(h) # 8777.987291627895
plt.annotate('{0:.2f}'.format(h), xy=(h, 0.02), fontsize=12)

sns.distplot(r1['TAXA_ATUAL_DOWN'].dropna())
sns.distplot(r1[r1['REMOTO'] == 1]['TAXA_ATUAL_DOWN'].dropna(), hist=False, label='Y = 1')

我想知道是什么原因导致我应该如何让注释正常工作,或者修复我做错的任何事情。

【问题讨论】:

    标签: python matplotlib annotations seaborn


    【解决方案1】:

    尝试替换

    plt.annotate('{0:.2f}'.format(h), xy=(h, 0.02), fontsize=12)
    

    与

    plt.annotate('{0:.2f}'.format(h), xy=(h+100, 0.00012), fontsize=12)
    

    我相信正在发生的事情是您试图在与旧绘图中相同的 xy 坐标上进行注释,但轴比例却截然不同。因此,当您在 xy=(h,0.02) 处进行注释时,0.02 明显高于 y 轴的最大值,并且您的图形正在相应地重新缩放。

    看看你的新情节,将你的文本放在像xy=(h+100, 0.00012) 这样的地方或附近的地方似乎更有意义。如果可行,您可以根据您想要的位置微调您的位置(或者,更以编程方式,将您的 y 坐标放在类似0.75 * maximum_y_value 的位置,其中maximum_y_value 是您的 y 轴上的最高点)。

    一个简单但有效的方法是使用

    y_max = max([h.get_height() for h in sns.distplot(r1[r1['REMOTO'] == 1]['TAXA_ATUAL_DOWN'].dropna()).patches])
    
    plt.annotate('{0:.2f}'.format(h), xy=(h, 0.75*y_max), fontsize=12)
    

    这实际上是获取默认情况下将在sns.distplot(您已禁用)中绘制的直方图的值,并找到其中的最大值。

    【讨论】:

    • 谢谢。你知道我怎样才能在地块使用的度量中获得 maximum_y_value 吗?我的意思是,maximum_y_value = r1['TAXA_ATUAL_DOWN'].max() 不会产生所需的输出,因为我正在绘制分布图。
    • 来自this 的回答,我相信你可以像这样得到它:max([h.get_height() for h in sns.distplot(r1[r1['REMOTO'] == 1]['TAXA_ATUAL_DOWN'].dropna().patches]),或者想出一个更好的数学方法。仅供参考,我的方式将是一个近似值,但对于您正在使用的方法来说应该足够准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多