Bạn có thể gần được những gì bạn muốn bằng cách thực hiện:
g.plot(kind='bar')
nhưng nó tạo ra một âm mưu cho mỗi nhóm (và doesn' hãy đặt tên cho các ô sau các nhóm sao cho nó là một IMO vô dụng.)
Dưới đây là một cái gì đó trông khá đẹp, nhưng không liên quan đến khá nhiều "bằng tay" matplotlib
làm việc, mà ai cũng muốn tránh, nhưng không ai có thể:
import numpy.random as rnd
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
x = pd.DataFrame(rnd.randn(100).reshape(20, 5), columns=list('abcde'))
group_col = 'groups'
groups = ['foo', 'bar', 'baz']
x[group_col] = pd.Series(rnd.choice(groups, len(x)))
g = x.groupby(group_col)
num_groups = g.ngroups
fig, axes = plt.subplots(num_groups)
for i, (k, group) in enumerate(g):
ax = axes[i]
ax.set_title(k)
group = group[[c for c in group.columns if c != group_col]]
num_columns = len(group.columns)
colours = cm.Spectral([float(x)/num_columns for x in range(num_columns)])
ax.hist(group.values, 5, histtype='bar',
label=list(group.columns), color=colours,
linewidth=1, edgecolor='white')
ax.legend()
plt.show()
Mà tôi nghĩ mang đến cho bạn những gì bạn muốn:
cập nhật đáp lại ý kiến (và là câu trả lời đây là một vài tuổi) tôi đã cố gắng để lột câu trả lời này xuống đến xương barest của nó. Có
có thể bây giờ là cách ghi nhãn các ô của
groupby
đối tượng nhưng tôi không biết về nó.
Đây là cách đơn giản nhất để có thể làm điều này:
axes = g.plot(kind='hist')
for i, (groupname, group) in enumerate(g):
axes[i].set_title(groupname)
tuyệt vời. Vì vậy, không có cách nào để có được điều này được thực hiện mà không nhận được bàn tay với bẩn với api matplotlib thực sự. Điều này nên là một hạn chế gấu trúc, tôi có đúng không? – vumaasha
Tôi đang tìm biểu đồ? Làm thế nào tôi có thể chuyển đổi các thanh vào biểu đồ? – vumaasha
Tôi đã cập nhật câu trả lời để sử dụng biểu đồ (và làm cho kết quả đẹp hơn nhiều). – LondonRob