2013-05-06 129 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處放置一條水平線 - 但您可以隨心所欲放置任意位置。