天天看點

python 顯著性差異_python matplotlib 标注 統計差異 顯著性 *

畫柱狀圖時會遇到添加顯著性标記的問題,因為matplotlib沒有自帶的接口,是以隻好自己畫了一個

主要思路是用plot畫标注框線,用annotate标注。

具體應用的時候需要根據柱狀圖的位置,調整x和y的坐标

import numpy as np #使用import導入子產品numpy,并簡寫成np

import matplotlib.pyplot as plt #使用import導入子產品matplotlib.pyplot,并簡寫成plt

plt.figure(figsize=(8,4)) #設定繪圖對象的寬度和高度

from PIL import Image

from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定預設字型

mpl.rcParams['axes.unicode_minus'] = False #解決儲存圖像是負号'-'顯示為方塊的問題

x = np.ones((4))

y = np.arange(0.7,1.0,0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x = np.arange(1,3.1,0.1)

y = 1+0*x

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x0 = 2

y0=1

plt.annotate(r'$***$', xy=(x0, y0), xycoords='data', xytext=(-15, +1),

textcoords='offset points', fontsize=16,color="red")

x = np.ones((4))*3

y = np.arange(0.7,1.0,0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

plt.ylim(0,2) #使用plt.ylim設定y坐标軸範圍

plt.xlim(-1,5)

plt.xlabel("随便畫畫") #用plt.xlabel設定x坐标軸名稱

'''設定圖例位置'''

plt.grid(True)

plt.show()

結果示意

python 顯著性差異_python matplotlib 标注 統計差異 顯著性 *

示意圖

将代碼改寫成函數,友善複用

def plot_sig(xstart,xend,ystart,yend,sig):

x = np.ones((2))*xstart

y = np.arange(ystart,yend,yend-ystart-0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x = np.arange(xstart,xend+0.1,xend-xstart)

y = 1+0*x

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x0 = (xstart+xend)/2

y0=yend

plt.annotate(r'%s'%sig, xy=(x0, y0), xycoords='data', xytext=(-15, +1),

textcoords='offset points', fontsize=16,color="red")

x = np.ones((2))*xend

y = np.arange(ystart,yend,yend-ystart-0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

plt.ylim(0,2) #使用plt.ylim設定y坐标軸範圍

plt.xlim(-1,5)

plt.xlabel("随便畫畫") #用plt.xlabel設定x坐标軸名稱

'''設定圖例位置'''

plt.grid(True)

plt.show()

plot_sig(1,3.0,0.8,1.1,'***')

将函數的參數都改成清單,使可以同時呈現不同資料之間比較的結果

def plot_sig(xstart,xend,ystart,yend,sig):

for i in range(len(xstart)):

x = np.ones((2))*xstart[i]

y = np.arange(ystart[i],yend[i],yend[i]-ystart[i]-0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x = np.arange(xstart[i],xend[i]+0.1,xend[i]-xstart[i])

y = yend[i]+0*x

plt.plot(x,y,label="$y$",color="black",linewidth=1)

x0 = (xstart[i]+xend[i])/2

y0=yend[i]

plt.annotate(r'%s'%sig, xy=(x0, y0), xycoords='data', xytext=(-15, +1),

textcoords='offset points', fontsize=16,color="red")

x = np.ones((2))*xend[i]

y = np.arange(ystart[i],yend[i],yend[i]-ystart[i]-0.1)

plt.plot(x,y,label="$y$",color="black",linewidth=1)

plt.ylim(0,math.ceil(max(yend)+4)) #使用plt.ylim設定y坐标軸範圍

# plt.xlim(math.floor(xstart)-1,math.ceil(xend)+1)

#plt.xlabel("随便畫畫") #用plt.xlabel設定x坐标軸名稱

'''設定圖例位置'''

#plt.grid(True)

plt.show()

plot_sig([0.42,1.42],[1.42,2.42],[30,20],[30.8,20.8],'***')

加上柱狀圖,結果如下

python 顯著性差異_python matplotlib 标注 統計差異 顯著性 *

示意圖

原創,轉載請注明出處