2012-01-05 3 views
6

point and figure chart을 만들려고합니다. 터미널에서 인쇄 작업을 할 수는 있지만 matplotlib로 그래프로 표시하고 싶습니다. 이런 식으로하는 가장 좋은 방법은 무엇일까요? 나는 산란을 생각하고 있었지만, 나는 이것을 할 때 기둥들이 너무 멀리 퍼져 나갔다. 열이 가능한 한 서로 가깝게 제공되는 링크에서 차트와 비슷한 것을 얻고 싶습니다. 강제로이 매개 변수를 덮어 쓸 수 있습니까? matplotlib를 처음 사용하는 경우 이것이 사소한 경우 실례합니다. 감사.matplotlib의 포인트 및 그림 차트

+0

Jeff가 여기에서 청취 중이면, P & F 차트를 터미널에 성공적으로 인쇄했다고하셨습니다. 당신은 pl겠습니까. 파이썬 코드 (또는 최소한 논리)를 공유 하시겠습니까? 파이썬에서 P & F 차트를 개발하려고합니다. 터미널에서 인쇄 할 수 있다면 HTML 형식으로 가져갑니다. 감사합니다, – Vineet

+0

작업 영역과 그림 차트가 그려져 있습니까? –

답변

11

sparameter을 선택하여 산점도에 사용되는 기호의 크기를 조정할 수 있습니다. 또한 그림 크기 (figsize) 또는 축 크기 (add_axes)를 조정해야 할 수 있습니다. 이는 산포의 기호가 표시 단위에서 정사각형이며 x 및 y 축이 자동으로 조정되지 않기 때문에 너비가 한 변경 = 높이 상자가됩니다.

즉, 제공 한 예는 높이> 너비가있는 직사각형 플롯이고 높이 및 너비는 너비가 한 번 변경 == 높이가있는 상자가되도록 선택됩니다. 여기

이 적용 이러한 기술의 예 :

import matplotlib.pyplot as plt 

BOX = 5 
START = 365 
changes = (8, -3, 4, -4, 12, -3, 7, -3, 5, -9, 3) 

# one way to force dimensions is to set the figure size: 
fig = plt.figure(figsize=(5, 10)) 

# another way is to control the axes dimensions 
# for axes to have specific dimensions: 
#     [ x0, y0, w, h] in figure units, from 0 to 1 
#ax = fig.add_axes([.15, .15, .7*.5, .7]) 
ax = fig.add_axes([.15, .15, .7, .7]) 

def sign(val): 
    return val/abs(val) 

pointChanges = [] 
for chg in changes: 
    pointChanges += [sign(chg)] * abs(chg) 

symbol = {-1:'o', 
      1:'x'} 

chgStart = START 
for ichg, chg in enumerate(changes): 
    x = [ichg+1] * abs(chg) 
    y = [chgStart + i * BOX * sign(chg) for i in range(abs(chg))] 
    chgStart += BOX * sign(chg) * (abs(chg)-2) 
    ax.scatter(x, y, 
       marker=symbol[sign(chg)], 
       s=175) #<----- control size of scatter symbol 

ax.set_xlim(0, len(changes)+1) 
fig.savefig('pointandfigure.png') 
plt.show() 
각 산포도를 위해 개발 된 방법은 매우 hackish하지만 중요한 점은 내가 분산 s 매개 변수와 그림 크기로 재생하는 데 필요한 것입니다

원하는 효과를 얻으십시오.

결과 줄거리는 다음과 같습니다

enter image description here

이상적으로, 하나는 분산 방법을 모델 사용자 정의 메소드를 만들 것입니다. x의, o 및 월 레이블을 포함하는 사용자 정의 Collectioninstance을 작성합니다. 또한 a) 축/그림 모양을 자동으로 조정하거나 b) 비대칭 기호를 만드십시오. 이것은 분명히 개발자로서 Matplotlib 프로젝트에 기여하고자하는 고급 옵션입니다.

+0

자세한 답변을 주셔서 감사합니다. – Jeff

+0

+1 좋은 답변, upvoted – joaquin

0

개인적인 경험이 없지만 아마도 set_view_interval() 또는 set_data_interval()을 here에서? Matplotlib을 프로젝트에 사용했지만 x 축 너비를 수정하지 않아도되었습니다.

+0

데이터 프레임에 X와 O가 있으면이 동일한 그래프를 만드는 방법은 무엇입니까? –

관련 문제