PYTHON:根据范围注释框消失

时间:2016-01-27 18:45:06

标签: python matplotlib annotations

我有一个问题是绘制一些数据和拟合的信息框。玩具示例如下。

import numpy as np
import matplotlib.pyplot as plt

#Works
sigma = 0.12
mu = 0.5

#Half Works
sigma = 0.1
mu = 0.3

##None Works
#sigma = 0.05
#mu = 0.2

Sample = np.random.normal(mu, sigma, 10000)

figHS = plt.figure() 
axHS = figHS.add_subplot(1, 1, 1)
n, histbins, patches = axHS.hist(Sample,100, histtype='step', normed=1) 
axHS.annotate("$\mu=%.3f$ \n $\sigma=%.3f$ \n $N=%i$"%
              (Sample.mean(), Sample.std(), len(Sample)),
              xytext=(0.8, 0.85), bbox=dict(boxstyle="sawtooth", fc="w"),
              xy=(0.8, 0.85), textcoords='axes fraction')
axHS.plot(histbins, plt.mlab.normpdf(histbins, mu, sigma))
axHS.annotate(" $\mu=%.3f$ \n $\sigma=%.3f$ \n $N=%s$"%(mu,sigma,"--"),
              xytext=(0.6, 0.85), bbox=dict(boxstyle="round", fc="w"),
              xy=(0.6, 0.85), textcoords='axes fraction')
plt.show()

如果您尝试使用三个不同的输入值,您可以看到它与x范围有关。它可能在1以下处理不同或从错误的对象获取范围。由于这是一个玩具示例,我在实际使用案例中受到更多限制,因此请不要建议我以完全不同的方式执行此操作,除非像#34; histbins"以类似的方式传递。

从第一个输入值获得所需的结果。 enter image description here

但不是第二个输入值: enter image description here

或第三个输入值: enter image description here

1 个答案:

答案 0 :(得分:1)

这是之前讨论过的问题see

def anno_example(sigma, mu):
    Sample = np.random.normal(mu, sigma, 10000)

    figHS = plt.figure(figsize=(9,6)) 
    axHS = figHS.add_subplot(1, 1, 1)
    n, histbins, patches = axHS.hist(Sample,100, histtype='step', normed=1) 

    axHS.plot(histbins, plt.mlab.normpdf(histbins, mu, sigma))

    axHS.annotate("$\mu=%.3f$ \n $\sigma=%.3f$ \n $N=%i$"%
                  (Sample.mean(), Sample.std(), len(Sample)),
                  xytext=(0.8, 0.85), bbox=dict(boxstyle="sawtooth", fc="w"),
                  xy=(0.8, 0.85), xycoords=axHS.transAxes)
    axHS.annotate(" $\mu=%.3f$ \n $\sigma=%.3f$ \n $N=%s$"%(mu,sigma,"--"),
                  xytext=(0.6, 0.85), bbox=dict(boxstyle="round", fc="w"),
                  xy=(0.6, 0.85), xycoords=axHS.transAxes)

anno_example(0.12, 0.5)
anno_example(0.1,  0.3)
anno_example(0.05, 0.2)

enter image description here enter image description here enter image description here

只需将textcoords="axes fraction"替换为xycoords=axHS.transAxesxycoords="axes fraction"即可。