python - matrices - matplotlib
Indicando la diferencia estadísticamente significativa en el gráfico de barras (1)
Uso un gráfico de barras para indicar los datos de cada grupo. Algunas de estas barras difieren significativamente entre sí. ¿Cómo puedo indicar la diferencia significativa en el diagrama de barras?
import numpy as np
import matplotlib.pyplot as plt
menMeans = (5, 15, 30, 40)
menStd = (2, 3, 4, 5)
ind = np.arange(4) # the x locations for the groups
width=0.35
p1 = plt.bar(ind, menMeans, width=width, color=''r'', yerr=menStd)
plt.xticks(ind+width/2., (''A'', ''B'', ''C'', ''D'') )
Estoy apuntando a
He hecho un par de cosas aquí que sugiero cuando se trabaja con tramas complejas. Extraiga el formato personalizado en un diccionario, simplifica la vida cuando desea cambiar un parámetro, y puede pasar este diccionario a múltiples trazados. También escribí una función personalizada para hacer annotate
los videos, como una bonificación que puede anotar entre (A,C)
si realmente quieres (estoy de acuerdo con mi comentario de que este no es el enfoque visual correcto, sin embargo). Es posible que necesite algunos ajustes una vez que los datos cambian, pero esto debería ponerlo en el camino correcto.
import numpy as np
import matplotlib.pyplot as plt
menMeans = (5, 15, 30, 40)
menStd = (2, 3, 4, 5)
ind = np.arange(4) # the x locations for the groups
width= 0.7
labels = (''A'', ''B'', ''C'', ''D'')
# Pull the formatting out here
bar_kwargs = {''width'':width,''color'':''y'',''linewidth'':2,''zorder'':5}
err_kwargs = {''zorder'':0,''fmt'':None,''lw'':2,''ecolor'':''k''}
X = ind+width/2
fig, ax = plt.subplots()
ax.p1 = plt.bar(ind, menMeans, **bar_kwargs)
ax.errs = plt.errorbar(X, menMeans, yerr=menStd, **err_kwargs)
# Custom function to draw the diff bars
def label_diff(i,j,text,X,Y):
x = (X[i]+X[j])/2
y = 1.1*max(Y[i], Y[j])
dx = abs(X[i]-X[j])
props = {''connectionstyle'':''bar'',''arrowstyle'':''-'',/
''shrinkA'':20,''shrinkB'':20,''lw'':2}
ax.annotate(text, xy=(X[i],y+7), zorder=10)
ax.annotate('''', xy=(X[i],y), xytext=(X[j],y), arrowprops=props)
# Call the function
label_diff(0,1,''p=0.0370'',X,menMeans)
label_diff(1,2,''p<0.0001'',X,menMeans)
label_diff(2,3,''p=0.0025'',X,menMeans)
plt.ylim(ymax=60)
plt.xticks(X, labels, color=''k'')
plt.show()