2016-08-31 4 views
1

각 보텀 위에 "카운트"레이블이있는 간단한 막대 그래프를 그리기위한 표준 보일러 플레이트 코드가 있습니다. 데이터가 변경되면이 막대 그래프를 실시간으로 업데이트하고 있습니다. 그래프를 성공적으로 업데이트 할 수 있습니다. 코드는 다음과 같습니다.그래프를 새로 고칠 때 pylab/matplotlib를 사용하여 레이블을 업데이트하십시오.

fig, ax = plt.subplots() 
def my_graph(): 
    y_pos = np.arange(len(data_list)) 
    rects1 = ax.bar(y_pos, count_list, 0.28, color='r') 
    # plt.bar(y_pos, count_list, 0.28, color='b', align='center', alpha=0.5) 
    ax.set_xticks(y_pos, data_list) 
    ax.set_xticklabels(data_list, rotation='vertical') 
    ax.set_ylabel('Counts') 
    ax.set_title('Some stats ') 
    plt.plot() 
    plt.ylim([0, 50]) 
    autolabel(rects1) 

def autolabel(rects): 
    # attach some text labels 
    for rect in rects: 
     height = rect.get_height() 
     ax.text(rect.get_x() + rect.get_width()/2., 1.05 * height, 
      '%d' % int(height), ha='center', va='bottom') 

알다시피 표준 보일러 플레이트 코드입니다. 내 주에서 나는 수행

if __name__ == "__main__": 
    my_graph() 
    plt.ion() 
    while True: 
     time.sleep(3) 
     get_updated_data() 
     my_graph() 
     plt.pause(0.01) 

get_updated_data은 새로운 데이터를 끌어와 그래프를 생성하는 코드를 호출합니다. 바를 올바르게 업데이트하고 있습니다. 그러나 각 막대 위에 추가 된 레이블은 덮어 쓰이지 않습니다. 그래프가 새로 고침 될 때마다 서로 겹쳐집니다. 이 문제를 해결하는 적절한 방법은 무엇입니까? fig.canvas.draw()를 시도했지만 작동하지 않습니다. 어쩌면 나는 그것을 잘못된 장소에 추가 할 것입니다. 올바른 접근 방식은 무엇입니까?

감사

+0

전체 작업 코드를 표시 할 수 있습니까? –

+0

거기에있는 모든 플롯 코드가 있습니다. 다른 것들은 여기에 넣을 수없는 데이터입니다. 데이터 부분은 적절한 값으로 count_list 및 data_list 만 생성합니다 –

답변

0

하나의 옵션은 cla()와 축 각 반복을 취소하는 것입니다. 또는 각 텍스트 객체를 저장하고 필요할 때 제거 할 수 있습니다.

t = ax.text(0.5,0.5,"label") 
plt.pause(3) 
t.remove() 
fig.canvas.draw() 
관련 문제