Python 如何将p值作为图例添加到matplotlib中的轴中

Python 如何将p值作为图例添加到matplotlib中的轴中,python,pandas,matplotlib,data-visualization,p-value,Python,Pandas,Matplotlib,Data Visualization,P Value,我有以下代码: def plot_diff_dist(ax, simulations, real_difference, bins=20): p=pvalue(simulations, real_difference) ax.hist(simulations, bins=bins ) ax.axvline(real_difference, color='r', linewidth=5) 稍后plot_diff_dist将被调用,其他函数将在不同的轴上绘制直方图,我需要将

我有以下代码:

def plot_diff_dist(ax, simulations, real_difference, bins=20):
    p=pvalue(simulations, real_difference)
    ax.hist(simulations, bins=bins )
    ax.axvline(real_difference, color='r', linewidth=5)

稍后plot_diff_dist将被调用,其他函数将在不同的轴上绘制直方图,我需要将p作为图例添加到它生成的每个直方图中。因此,我需要更改此函数,将p作为图例附加到每个直方图。

您可以从so尝试此解决方案

编辑:将p显示为变量:

from matplotlib.patches import Rectangle
df = pd.DataFrame({'x':np.random.normal(2500,size=1000)})
ax = df.plot.hist()
p=1.2
ax.axvline(2501,color='r', linewidth=2)
extra = Rectangle((0, 0), 100, 100, fc="w", fill=False, edgecolor='none', linewidth=0)
ax.legend([extra],('p = {}'.format(p),"x"))

您可以从SO尝试此解决方案

编辑:将p显示为变量:

from matplotlib.patches import Rectangle
df = pd.DataFrame({'x':np.random.normal(2500,size=1000)})
ax = df.plot.hist()
p=1.2
ax.axvline(2501,color='r', linewidth=2)
extra = Rectangle((0, 0), 100, 100, fc="w", fill=False, edgecolor='none', linewidth=0)
ax.legend([extra],('p = {}'.format(p),"x"))

假设您有一些代码来生成这样的直方图

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)

x = np.random.poisson(3, size=100)
p = 5.
plt.hist(x, bins=range(10))
l = plt.axvline(p, color="crimson")
传奇 您可以使用和提供axvline作为图例处理程序,以及格式化值作为图例文本

plt.legend([l], ["p={}".format(p)], loc=1)

文本 您可以使用在图形中放置文本。默认情况下,坐标是数据坐标,但您可以指定转换以切换,例如切换到轴坐标

plt.text(.96,.94,"p={}".format(p), bbox={'facecolor':'w','pad':5},
         ha="right", va="top", transform=plt.gca().transAxes )

注释 您可以使用在图形中的某个位置生成文本。与
text
相比,它的优点是:(a)可以使用附加箭头指向对象,以及(b)可以使用简单字符串而不是变换来指定坐标系

plt.annotate("p={}".format(p), xy=(p, 15), xytext=(.96,.94), 
            xycoords="data", textcoords="axes fraction",
            bbox={'facecolor':'w','pad':5}, ha="right", va="top",
            arrowprops=dict(facecolor='black', shrink=0.05, width=1))

锚定文本 您可以使用“从偏移量”框:

from matplotlib.offsetbox import AnchoredText
a = AnchoredText("d={}".format(d), loc=1, pad=0.4, borderpad=0.5)
plt.gca().add_artist(a)

假设您有一些代码来生成这样的直方图

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)

x = np.random.poisson(3, size=100)
p = 5.
plt.hist(x, bins=range(10))
l = plt.axvline(p, color="crimson")
传奇 您可以使用和提供axvline作为图例处理程序,以及格式化值作为图例文本

plt.legend([l], ["p={}".format(p)], loc=1)

文本 您可以使用在图形中放置文本。默认情况下,坐标是数据坐标,但您可以指定转换以切换,例如切换到轴坐标

plt.text(.96,.94,"p={}".format(p), bbox={'facecolor':'w','pad':5},
         ha="right", va="top", transform=plt.gca().transAxes )

注释 您可以使用在图形中的某个位置生成文本。与
text
相比,它的优点是:(a)可以使用附加箭头指向对象,以及(b)可以使用简单字符串而不是变换来指定坐标系

plt.annotate("p={}".format(p), xy=(p, 15), xytext=(.96,.94), 
            xycoords="data", textcoords="axes fraction",
            bbox={'facecolor':'w','pad':5}, ha="right", va="top",
            arrowprops=dict(facecolor='black', shrink=0.05, width=1))

锚定文本 您可以使用“从偏移量”框:

from matplotlib.offsetbox import AnchoredText
a = AnchoredText("d={}".format(d), loc=1, pad=0.4, borderpad=0.5)
plt.gca().add_artist(a)

谢谢,在我的问题中,p是一个变量,我怎样才能更改您的代码以接受变量p?这不是一个字符串。谢谢,在我的问题中,p是一个变量,我如何更改您的代码以接受变量p?它不是一根绳子