我想为每组绘制6个不同的条形图(AWA,Rem,S1,S2,SWS,stades)。共有4组。
我知道问题出在:fig,ax = plt.subplots() 我该如何解决这个问题?
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
N = 4 # groups: EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
AWA = (99, 98, 98, 95) #EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(ind, AWA, width, color='r')
Rem = (100, 99, 97, 94) #EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
rects2 = ax.bar(ind + width, Rem, width, color='y')
S1 = (98, 97, 95, 93) #EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
rects3 = ax.bar(ind + width, S1, width, color='b')
S2 = (99, 99, 95, 92) #EEG+EMG+EOG+twins(28), EEG+EMG+EOG(26), EEG+twins(22), EEG(20)
rects4 = ax.bar(ind + width, S2, width, color='g')
SWS = (99, 100, 95, 94) #EEG+EMG+EOG+twins(28), EEG+EMG+EOG(26), EEG+twins(22), EEG(20)
rects5 = ax.bar(ind + width, SWS, width, color='y')
stades = (99, 98, 92, 86) #EEG+EMG+EOG+twins(28), EEG+EMG+EOG(26), EEG+twins(22), EEG(20)
rects6 = ax.bar(ind + width, stades, width, color='b')
# add some text for labels, title and axes ticks
ax.set_ylabel('Accuracy')
ax.set_title('Accuracy by group - RF')
ax.set_xticks(ind + width)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4'))
ax.legend((rects1[0], rects2[0], rects3[0], rects4[0], rects5[0], rects6[0]), ('AWA', 'Rem', 'S1', 'S2', 'SWS', 'stades'))
plt.show()
答案 0 :(得分:1)
如果是你想要的子图,你可以这样做:
import numpy as np
import matplotlib.pyplot as plt
N = 4 # groups: EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
data = ((99, 98, 98, 95),
(100, 99, 97, 94),
(98, 97, 95, 93),
(99, 99, 95, 92),
(99, 100, 95, 94),
(99, 98, 92, 86))
#EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
labels = ('AWA', 'Rem', 'S1', 'S2', 'SWS', 'stades')
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars
fig = plt.figure()
fig.suptitle('Accuracy by group - RF')
for i in range(len(labels)):
ax = plt.subplot(3,2,i+1)
ax.bar(ind + width, data[i], width, color='y')
ax.set_ylabel('Accuracy')
ax.set_title(labels[i])
ax.set_xticks(ind + width)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4'))
plt.show()
答案 1 :(得分:1)
另一种方法是将所有条形彼此相邻:
import numpy as np
import matplotlib.pyplot as plt
N = 4 # groups: EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
data = ((99, 98, 98, 95),
(100, 99, 97, 94),
(98, 97, 95, 93),
(99, 99, 95, 92),
(99, 100, 95, 94),
(99, 98, 92, 86))
#EEG_EMG_EOG_twins(28), EEG_EMG_EOG(26), EEG_twins(22), EEG(20)
labels = ('AWA', 'Rem', 'S1', 'S2', 'SWS', 'stades')
k = len(data)
colors = ('r', 'y', 'b', 'g', 'y', 'b')
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars
indshift = np.linspace(-width/2,width/2,k)
fig = plt.figure()
fig.suptitle('Accuracy by group - RF')
for i in range(k):
plt.bar(ind + indshift[i], data[i], width/k, color=colors[i])
ax = gca()
ax.set_ylabel('Accuracy')
ax.set_xticks(ind + width)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4'))
plt.legend(labels)
plt.show()