tôi đã thực hiện một vài điều ở đây mà tôi đề nghị khi làm việc với âm mưu phức tạp. Kéo định dạng tùy chỉnh thành từ điển, nó làm cho cuộc sống trở nên đơn giản khi bạn muốn thay đổi tham số - và bạn có thể chuyển từ điển này sang nhiều ô. Tôi cũng đã viết một hàm tùy chỉnh cho annotate
các giá trị lặp lại, như một phần thưởng mà nó có thể chú thích giữa (A,C)
nếu bạn thực sự muốn (tôi đứng theo nhận xét của tôi rằng đây không phải là cách tiếp cận trực quan phù hợp). Nó có thể cần một số tinh chỉnh một khi dữ liệu thay đổi nhưng điều này sẽ đưa bạn đi đúng hướng.
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,'linewidth':2,'ecolor':'k'} #for matplotlib >= v1.4 use 'fmt':'none' instead
fig, ax = plt.subplots()
ax.p1 = plt.bar(ind, menMeans, **bar_kwargs)
ax.errs = plt.errorbar(ind, 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,'linewidth':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',ind,menMeans)
label_diff(1,2,'p<0.0001',ind,menMeans)
label_diff(2,3,'p=0.0025',ind,menMeans)
plt.ylim(ymax=60)
plt.xticks(ind, labels, color='k')
plt.show()
Are so sánh chỉ được thực hiện liền kề tại địa phương? Tức là, bạn chỉ muốn hiển thị sự khác biệt giữa '(A, B) (B, C) (C, D)' nhưng không phải là '(A, C)'? – Hooked
Không, tôi muốn so sánh giữa tất cả các cặp có thể. – imsc
Có thể khó hiển thị điều này trên biểu đồ, đặc biệt nếu có nhiều mục. Nếu bạn có N = 10, các mục có 45 so sánh cặp đôi khác nhau! Có vẻ như bạn có thể hiển thị giá trị p theo cặp của bạn trên ma trận thay thế. Điều này có hiệu quả không? – Hooked