2014-11-15 5 views
0

mathplotlib를
SO : How to plot multiple horizontal bars in one chart with matplotlib에서 사용하여 가로 막대 그래프를 생성 중입니다. 문제는 2 개 이상의 가로 막대가 있고 막대가 겹쳐져있는 경우입니다. 확실하지, 내가 뭘 잘못하고있어. 여기가로 막대 그래프 막대 그래프

import pandas 
import matplotlib.pyplot as plt 
import numpy as np 

df = pandas.DataFrame(dict(graph=['q1','q2','q3' , 'q4','q5',' q6'], 
          n=[3, 5, 2,3 ,5 , 2], m=[6, 1, 3, 6 , 1 , 3])) 

ind = np.arange(len(df)) 
width = 0.4 
opacity = 0.4 
fig, ax = plt.subplots() 


ax.barh(ind, df.n, width, alpha=opacity, color='r', label='Existing') 
ax.barh(ind + width, df.m, width, alpha=opacity,color='b', label='Community') 
ax.barh(ind + 2* width, df.m, width, alpha=opacity,color='g', label='Robust') 

ax.set(yticks=ind + width , yticklabels=df.graph, ylim=[2*width - 1, len(df)]) 
ax.legend() 



#plt.xlabel('Queries') 
plt.xlabel('Precesion') 
plt.title('Precesion for these queries') 

plt.show() 

는 현재 그래프 당신은 0.4 바의 폭을 설정이 Overlapped bars in Graph

답변

2

처럼 보이는 다음 그래프 코드,하지만 당신은 각 그룹의 세 가지 바있다. 이는 각 그룹의 너비가 1.2임을 의미합니다. 그러나 진드기는 1 단위 만 떨어져 있으므로 막대가 공백에 맞지 않습니다.

팬더를 사용하고 있으므로 실제로 모든 것을 할 필요는 없습니다. df.plot(kind='barh')을 수행하면 데이터 프레임 데이터의 수평 막 대형 차트가 표시됩니다. 설명서에서 찾을 수있는 다양한 매개 변수 인 plot을 사용하여 디스플레이 색상 등을 조정할 수 있습니다. (당신은 "그래프"열은 y 축 레이블로 사용하려면 인덱스로 설정 : df.set_index('graph').plot(kind='barh'))

(당신의 DataFrame 만 두를 가지고 있기 때문에, 그룹 당 두 개의 막대가 barplot을 줄 것이다 사용 귀하의 예제에서 열 m 두 번 플롯, 매우 유용하지 않습니다. 정말하고 싶다면, 당신은 중복 열을 DataFrame에 추가 할 수 있습니다.)

+0

유일한 문제는 내가 아닙니다. yaxis 측면에서 요소의 이름을 지정할 수 있습니다. 그것의 열거. yaxis의 0,1,2 대신 http://imgur.com/myoXtQv 사용자 정의 이름을 추가해야합니다. 문서에서 그 작업을 수행하는 방법을 찾을 수 없습니다. 어떤 아이디어? – Rahul

+0

@Rahul : 색인을 설정하면 레이블에 자동으로 사용됩니다. 'df.set_index ('그래프'). plot (kind = 'barh')'. – BrenBarn

+0

아니, 정확히 나를 위해 일하지 않습니다. 레이블을 y 축에 대해 q1, q2 및 q3으로 지정하면됩니다. 그렇다면 판다는 q1의 가치를 기대하고 있습니다. 그렇지 않습니다. 내가 원하는 것은 그것들을 분류하고 그것을 열거하지 않는 것입니다. – Rahul