我需要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个月。
但这只会返回一个包含所有值的图,这不是我的预期输出。
答案 0 :(得分:1)
我没有得到您的原始数据集,但是这里是您如何绘制内容的方法:)
import matplotlib.pyplot as plt
# Make my own data set here
data1 = {
'Southwest': 30,
'American': 12
}
data2 = {
'Southwest': 26,
'American': 35
}
def plot_my_data(ax, dataset):
names = list(dataset.keys())
numbers = list(dataset.values())
for index in range(len(names)):
if names[index] == 'Southwest':
ax.bar(names[index], numbers[index], label='Southwest', color='k')
else:
ax.bar(names[index], numbers[index])
fig, axs = plt.subplots(4, 3) #define our subplots
plot_my_data(axs[0, 0], data1) #for each subplot we give it data and an axs. The axs is defined as [row, column]
plot_my_data(axs[0, 1], data2)
plt.show() # show the result
如果您复制/粘贴此脚本,它将运行。然后,您只需要将其输入数据集即可。您可以根据类似我所显示的名称来指定颜色,也可以这样标记它们(这就是为什么这样做的功能很棒,因此您不必复制/粘贴12次)。
答案 1 :(得分:1)
我正在处理自己生成的数据集,因此可能并不完美。但是,它也应该可以处理您的数据。
我正在处理像这样的东西生成的数据:
#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()
我希望这是您所期望的。
答案 2 :(得分:0)
这是您要寻找的:
# import matplotlib and seaborn for data visualization.
import matplotlib.pyplot as plt
import seaborn as sns
# Load dataframe.
df = pd.DataFrame(...)
# Plot one bar for each airline, grouped by month.
sns.barplot(x="month", y="counts", hue="Airline", data=df)
plt.show()