2016-10-11 18 views
8

Tôi có gấu trúc dataframe với thông tin người dùng. Tôi muốn vẽ số tuổi của người dùng dưới dạng cả hai kind='kde' và trên kind='hist' trên cùng một âm mưu. Tại thời điểm này tôi có thể có hai ô riêng biệt. Các dataframe giống:Vẽ một khung dữ liệu như cả 'lịch sử' và 'kde' trên cùng một ô

member_df=  
user_id Age 
1   23 
2   34 
3   63 
4   18 
5   53 
... 

sử dụng

ax1 = plt.subplot2grid((2,3), (0,0)) 
member_df.Age.plot(kind='kde', xlim=[16, 100]) 
ax1.set_xlabel('Age') 

ax2 = plt.subplot2grid((2,3), (0,1)) 
member_df.Age.plot(kind='hist', bins=40) 
ax2.set_xlabel('Age') 

ax3 = ... 

Tôi hiểu rằng kind='kde' sẽ cho tôi tần số cho trục y trong khi kind='kde' sẽ cung cấp một phân phối tích lũy, nhưng là có một cách để kết hợp cả hai và trục y có được biểu diễn bằng tần số không?

Trả lời

6

pd.DataFrame.plot() trả về số ax nó đang âm mưu. Bạn có thể tái sử dụng điều này cho các lô khác.

Hãy thử:

ax = member_df.Age.plot(kind='kde') 
member_df.Age.plot(kind='hist', bins=40, ax=ax) 
ax.set_xlabel('Age') 

dụ
tôi âm mưu hist đầu tiên để đưa vào nền
Ngoài ra, tôi đưa kde trên secondary_y trục

import pandas as pd 
import numpy as np 


np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.randn(100, 2), columns=list('ab')) 

ax = df.a.plot(kind='hist') 
df.a.plot(kind='kde', ax=ax, secondary_y=True) 

enter image description here


phản ứng nhận xét
sử dụng subplot2grid. chỉ tái sử dụng ax1

import pandas as pd 
import numpy as np 

ax1 = plt.subplot2grid((2,3), (0,0)) 

np.random.seed([3,1415]) 
df = pd.DataFrame(np.random.randn(100, 2), columns=list('ab')) 

df.a.plot(kind='hist', ax=ax1) 
df.a.plot(kind='kde', ax=ax1, secondary_y=True) 

enter image description here

+0

Tôi đã thử nghiệm mã và cố gắng sửa đổi nó một chút cho những gì tôi cần. Điều này làm cho các trick khi tôi chỉ có hai lô để xem xét. Khi tôi cố gắng đưa vào 'sublot2grid', nó không tạo ra cùng một kết quả, nó chỉ tái tạo biểu đồ. – Lukasz

+2

@Lukasz bạn muốn sử dụng cùng một 'ax' trong mọi trường hợp. – piRSquared

2

Trong trường hợp bạn muốn nó cho tất cả các cột của dataframe của bạn:

fig, ax = plt.subplots(8,3, figsize=(20, 50)) 
# you can change the distribution, I had 22 columns, so 8x3 is fine to me 
fig.subplots_adjust(hspace = .2, wspace=.2,) 

ax = ax.ravel() 

for i in range(len(I_df.columns)): 
    ax[i] = I_df.iloc[:,i].plot(kind='hist', ax=ax[i]) 
    ax[i] = I_df.iloc[:,i].plot(kind='kde', ax=ax[i], secondary_y=True) 
    plt.title(I_df.columns[i]) 

Tôi hy vọng nó sẽ giúp :)

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