我需要12个地块(fig, axes = plt.subplots(4,3)
)
在每个图中,我需要一个小图,其中x轴是Airline
,y轴是他们每个月绘制的计数。
即对于第1个月-> x-axis='Airline'
和y-axis='counts'
,还要感谢每个条带是否具有不同的颜色。
同样,我每个月都需要这样的地块(12个地块)。
Airline counts
Month
1 Jet Airways 430
1 Air France 197
1 Emirates 184
2 Jet Airways 674
2 Air France 513
2 Emirates 369
3 Jet Airways 153
3 Air France 76
4 Emirates 63
.... ..... ....
我尝试过类似
df.groupby(df.index)['Airline'].plot(kind='bar')
下图仅包含7个月。
但这只会返回包含所有值的单个图,这不是我的预期输出。
最佳答案
我正在处理自己生成的数据集,因此它可能并不完美。但是,它也应该适用于您的数据。
我正在处理像这样的东西生成的数据:
#import all needed libraries
airline_names = ['BRITISH AIRWAYS PLC','VIRGIN ATLANTIC AIRWAYS LTD','BRITANNIA AIRWAYS AND THOMSONFLY','BRITISH AIRWAYS (EURO OPS) LGW','MONARCH AIRLINES','AIR EUROPE','FIRST CHOICE AIRWAYS LTD','CALEDONIAN AIRWAYS','BMI BRITISH MIDLAND','KLM UK LTD','ANGLO CARGO','MY TRAVEL AIRWAYS UK','LEISURE INTERNATIONAL','EXCALIBUR AIRWAYS','HEAVYLIFT','GB AIRWAYS LTD','NOVAIR INTERNATIONAL','BERLIN EUROPEAN UK','HUNTING CARGO AIRLINES LTD','TRADEWINDS AIRWAYS','LOGANAIR','DUO AIRWAYS LTD','BRITISH WORLD AIRLINES LTD','RYANAIR-EUROPE','BRITISH AIRWAYS CITIEXPRESS LTD','AIR FOYLE']
months = np.random.choice(range(1,13), size=40, replace=True)
counts = np.random.choice(range(200,800), size=40, replace=True)
airlines = np.random.choice(airline_names, size=40, replace=True)
df = pd.DataFrame({"Airline":airlines,"month":months,"counts":counts})
我以为一个月有一家航空公司,所以我没有该月的总数。在我的数据集中,一个月内可能会出现相同的航空公司。因此,请记住这一点。
grouped = df.groupby('month')
fig = plt.figure(figsize=(18,15))
i=0
import random as rand
#create random rgb colors assigned to airline
colors = {k: (rand.random(),rand.random(),rand.random()) for k in airline_names}
for month, values in grouped:
i += 1
ax = fig.add_subplot(4,3,i)
colors_list = [colors[airline] for airline in values["Airline"]]
values.plot.bar("Airline", "counts",ax=ax,color=colors_list,xticks=[],title=month)
#As a xlabel I printed only 7 chars, otherwise it would be mess
ax.set_xticklabels(values["Airline"].str[0:7])
plt.show()
输出如下:
我希望这是您所期望的。
关于python - 基于月份列的多个箱线图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55070138/