2015-02-05 16 views
1

저는 입니다. 실제로은 chaco bar plots을 만드는 방법을 이해하는 데 어려움을 겪고 있습니다. Chaco bar plots

나는 온라인 예를 보냈죠 봤는데 다음과 같은 간단한 코드로 아래로 감소 : 내 시도가 작동하지 않았다 말할 필요도없이
import numpy as np 
from traits.api import HasTraits, Instance 
from traitsui.api import View, Item 
from chaco.api import BarPlot, ArrayDataSource, DataRange1D, LinearMapper 
from enable.api import ComponentEditor 

class MyBarPlot(HasTraits): 
    plot = Instance(BarPlot) 

    traits_view = View(
     Item('plot',editor=ComponentEditor(), show_label=False)) 

    def _plot_default(self): 
     idx = np.array([1, 2, 3, 4, 5]) 
     vals = np.array([2, 4, 7, 4, 3]) 

     index = ArrayDataSource(idx) 
     index_range = DataRange1D(index, low=0.5, high=5.5) 
     index_mapper = LinearMapper(range=index_range) 

     value = ArrayDataSource(vals) 
     value_range = DataRange1D(value, low=0) 
     value_mapper = LinearMapper(range=value_range) 

     plot = BarPlot(index=index, value=value, 
         value_mapper=value_mapper, 
         index_mapper=index_mapper) 
     return plot 

if __name__ == "__main__": 
    myplot = MyBarPlot() 
    myplot.configure_traits() 

. 이 코드를 ipython 노트북에서 실행할 때 흑인으로 채워진 빈 플롯 창이 생깁니다.

나는 내 오류가 'valuemapper'항목과 관련이 있다고 생각하는데, 그 이유는 무엇인지 이해하지 못하기 때문입니다. 내 코드 오류에 대한 모든 포인터에 대해 감사하게 생각합니다.

일반적으로이 코딩 방법은 나에게 매우 복잡해 보입니다. chaco bar plot을 만드는 더 간단한 방법이 있습니까?

답변

2

bar_widthBarPlot의 특성은 여기에 똑똑하지 않으려 고합니다. 기본값은 데이터 공간에서 너비가 10이며 이는 플롯의 폭을 완전히 압도합니다. 이 문제를 해결하려면 수동으로 폭을 조정할 수 있습니다 : 당신이 주변 축 장식 및 기타 구성 요소가 누락 될 것이기 때문에이 여전히 당신에게 적절한 "막대 그래프"를 제공하지 않습니다

plot = BarPlot(index=index, value=value, 
       value_mapper=value_mapper, 
       index_mapper=index_mapper, 
       bar_width=0.8) 

참고. 가장 쉬운 방법은 chaco의 Plot 개체를 사용하는 것입니다. 여기

PlotBarPlot 인스턴스를 추가 한 예이다 :

https://github.com/enthought/chaco/blob/master/examples/demo/tornado.py

그리고 여기 Plot에서 plot 편의 방법을 사용하여 막대 그래프 작성하는 예이다 :

https://github.com/enthought/chaco/blob/master/examples/demo/basic/bar_plot_stacked.py

예, "음모"가 상당히 많이 오버로드되었습니다 (Chaco - Getting multiple data series to use the same axes and maps).

+0

대단히 감사합니다. 그 응답은 tsyu80입니다. 네, 맞았습니다. bar_width에 적절한 값을 설정하면 플롯 바가 서로 구별 될 수있게되었습니다. 대신 하나의 커다란 뚱뚱한 바가 막히지 않았습니다 (이것이 내 플롯이 모두 검은 색 이었기 때문입니다). 예제에도 감사드립니다. 플롯 편리한 방법을 사용하는 두 번째 방법은 '가장 단순한'솔루션을 제공하는 것처럼 보였지만 matplotlib 막 대형 차트와 비교해도 여전히 복잡해 보입니다. – dreme

+0

목표가 단지 정적 플롯을 생성하는 것이라면 Chaco가 더욱 장황합니다. 즉, Chaco는 응용 프로그램에 플롯을 추가하는 데 더 중점을 둡니다. 대화 형 플롯을 사용하여 응용 프로그램을 만드는 경우 Chaco가 matplotlib보다 간단하다는 것을 알 수 있습니다. –

+0

예, 좋은 지적입니다. 내가 모든 특성/ui/chaco 패러다임의 매달리기를 시작하기 때문에, 나는 그것을 아주 좋아한다. – dreme