2015-06-18 30 views
9

Tôi đang cố vẽ biểu đồ của nhiều thuộc tính được nhóm bởi một thuộc tính khác, tất cả chúng trong một khung dữ liệu.Cách thêm chú thích và tiêu đề vào biểu đồ nhóm được tạo bởi Pandas

với sự trợ giúp của số question này, tôi có thể đặt tiêu đề cho ô. Có cách nào dễ dàng để chuyển đổi chú thích cho mỗi subplot không.

Đây là mã của tôi

import numpy as np 
from numpy.random import randn,randint 
import pandas as pd 
from pandas import DataFrame 
import pylab as pl 

x=DataFrame(randn(100).reshape(20,5),columns=list('abcde')) 
x['new']=pd.Series(randint(0,3,10)) 
x.hist(by='new') 
pl.suptitle('hist by new') 

enter image description here

Trả lời

8

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: Beautiful histogram


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) 
+0

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

+0

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

+2

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

Các vấn đề liên quan