2014-11-13 4 views
3

두 개의 막대 그래프가 같은 플롯에 표시되도록하고 싶습니다 (다른 색상 및 가능한 경우 다른 alphas로 표시). 시도했습니다팬더 : 동일한 플롯에서 두 개의 막대 그래프 플로팅

import random 
x = pd.DataFrame([random.gauss(3,1) for _ in range(400)]) 
y = pd.DataFrame([random.gauss(4,2) for _ in range(400)]) 


x.hist(alpha=0.5, label='x') 
y.hist(alpha=0.5, label='y') 
x.plot(kind='kde', style='k--') 
y.plot(kind='kde', style='k--') 

plt.legend(loc='upper right') 
plt.show() 

이렇게하면 4 개의 다른 플롯으로 결과가 생성됩니다. 어떻게하면 같은 사람과 함께 가질 수 있습니까?

답변

5

정확하게 이해하면 두 명 모두 동일한 서브 플로트에 있어야합니다.

fig = plt.figure() 
ax = fig.add_subplot(111) 
x.plot(kind='kde', ax=ax) 
y.plot(kind='kde', ax=ax, color='red') 

는 당신이 필요로하는 하나의 음모로 모든 것을 얻으려면 : 또한 팬더 플롯 방법을 축 개체를 전달할 수

fig = plt.figure() 
ax = fig.add_subplot(111) 
_ = ax.hist(x.values) 
_ = ax.hist(y.values, color='red', alpha=.3) 

그래서 당신이 원하는 경우에, 그래서 또 다른 음모에 모두 KDE의가 수행해야 kde는 밀도이고 히스토그램은 빈도이기 때문에 두 개의 서로 다른 y- 스케일. 이를 위해서는 axes.twinx() 명령을 사용하십시오.

fig = plt.figure() 
ax = fig.add_subplot(111) 
_ = ax.hist(x.values) 
_ = ax.hist(y.values, color='red', alpha=.3) 

ax1 = ax.twinx() 
x.plot(kind='kde', ax=ax1) 
y.plot(kind='kde', ax=ax1, color='red') 
+0

감사합니다. 거의 작동합니다. 나는 이제 하나의 음모에 두 개의 히스토그램을 가지고 있으며, 두 개의 kde는 모두 하나의 음모에 있습니다. 어떻게 모두 같은 그림에 병합 할 수 있습니까? 두 번째'fig = ... '없이 모든 코드를 실행하면 여전히 2 개의 다른 플롯을 얻을 수 있습니다. – meto

+0

음, kde (밀도)가 히스토그램 (빈도)과 다른 축척을 가지므로 여기에'ax.twinx()'를 사용하여 두 번째 y 축척을 도입해야합니다 : [link] (http : // matplotlib. org/examples/api/two_scales.html). 내 대답을 초 단위로 업데이트합니다. – rustil

+0

첫 번째 해결책의 문제점은 빈의 너비에 따라 결정된다는 것입니다. 서로 다르면 수직축은 비교할 수 없습니다. – user48956

1

plt.figure() 및 add_subplot() 함수를 사용할 수 있습니다. 첫 번째 2 개의 인수는 플롯에서 원하는 행 및 열의 수이고 마지막은 플롯의 서브 플로트 위치입니다.

fig = plt.figure() 
subplot = fig.add_subplot(1, 2, 1) 
subplot.hist(x.ix[:,0], alpha=0.5) 
subplot = fig.add_subplot(1, 2, 2) 
subplot.hist(y.ix[:,0], alpha=0.5) 
관련 문제