2013-05-06 67 views
7

是否有可能在Python中生成Bland-Altman plot?我似乎无法找到任何关于它的事情。Bland-Altman在Python中的阴谋

这种类型的图的另一个名称是图基平均差图

例子:

enter image description here

+2

你为什么不只是使用'plt.plot'绘制点,使用'plt.axhline'添加水平线?这个情节似乎很容易做到。 – 2013-05-06 13:03:00

+0

是的绘图很容易。但我想也许在一个库中有一个模块,它也进行了计算。例如,我通过我的2个信号,并绘制我的情节。它在x轴上总是平均值,在y轴上是2个信号的差值。水平线条的平均标准偏差(NEG和POS) – Ojtwist 2013-05-06 13:04:49

回答

18

如果我已经明白的情节背后的理论正确,此代码应提供基本的绘图,而你可以把它配置到自己的特定需求。

import matplotlib.pyplot as plt 
import numpy as np 

def bland_altman_plot(data1, data2, *args, **kwargs): 
    data1  = np.asarray(data1) 
    data2  = np.asarray(data2) 
    mean  = np.mean([data1, data2], axis=0) 
    diff  = data1 - data2     # Difference between data1 and data2 
    md  = np.mean(diff)     # Mean of the difference 
    sd  = np.std(diff, axis=0)   # Standard deviation of the difference 

    plt.scatter(mean, diff, *args, **kwargs) 
    plt.axhline(md,   color='gray', linestyle='--') 
    plt.axhline(md + 1.96*sd, color='gray', linestyle='--') 
    plt.axhline(md - 1.96*sd, color='gray', linestyle='--') 

data1data2的相应的元件被用于计算用于标绘点的坐标。

然后,您可以通过运行

from numpy.random import random 

bland_altman_plot(random(10), random(10)) 
plt.title('Bland-Altman Plot') 
plt.show() 

Bland-Altman Plot

+1

不应该是'MD + 1.96 * sd'和'MD - 1.96 * sd'呢? – 2015-08-29 02:55:36

0

也许我失去了一些东西,但是这似乎很容易:

from numpy.random import random 
import matplotlib.pyplot as plt 

x = random(25) 
y = random(25) 

plt.title("FooBar") 
plt.scatter(x,y) 
plt.axhline(y=0.5,linestyle='--') 
plt.show() 

在这里,我只是0和1之间我创造一些随机数据随机在y = 0.5处放置一条水平线 - 但您可以随心所欲放置任意位置。