2016-10-11 24 views
8

Mam pandy dataframe z informacjami użytkownika. Chciałbym wykreślić wiek użytkowników jako zarówno kind='kde', jak i kind='hist' na tym samym wykresie. W tej chwili mogę mieć dwie osobne działki. Dataframe przypomina:Wykreślanie ramki danych jako zarówno "hist", jak i "kde" na tym samym wykresie

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

użyciu

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 = ... 

Rozumiem, że kind='kde' da mi częstotliwości dla osi y, natomiast kind='kde' dadzą skumulowany rozkład, ale czy jest jakiś sposób, aby połączyć oba i Czy oś y jest reprezentowana przez częstotliwości?

Odpowiedz

6

pd.DataFrame.plot() zwraca wartość ax, dla której jest przeznaczona. Możesz użyć tego ponownie dla innych działek.

Spróbuj:

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

przykład
wykreślić hist najpierw umieścić w tle
Również kładę kde na secondary_y osi

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


odpowiedzi na komentarz
użyciu subplot2grid. tylko ponowne 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

Przetestowałem kod i próbowałem nieco zmodyfikować to, czego potrzebuję. Robi to, gdy mam tylko te dwa wątki do rozważenia. Kiedy próbuję dołączyć do 'sublot2grid' nie uda się uzyskać tego samego wyniku, odtwarza tylko histogram. – Lukasz

+2

@ Łukasz, w każdym przypadku chcesz użyć tego samego "topora". – piRSquared

2

w przypadku chcesz go dla wszystkich kolumn swojej dataframe:

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]) 

Mam nadzieję, że to pomaga :)