2017-04-01 3 views
0

아래 차트를보십시오. 이 차트에서 중심 좌표가 (45, 0) 인 원으로 그립니다. 하지만 보시다시피 차트의 최저 한계는 0이며 내 원의 절반은 표시되지 않습니다. 그래서이 차트를 조금 아래로 확장해야합니다. 이 차트의 맨 아래 줄이 0이고 숫자 0을 곱한 값이 0이기 때문에 "여백"축 (ax.margins()) 메서드가 작동하지 않습니다.Matplotlib 여백

참고 : ax.set_ylim (...) 또는 ax.set_yticks (...)와 같은 답장을 게시하지 마십시오. 나는이 문제에 대한 일반적인 해결책을 찾고있다. 질문에

Code 
import matplotlib.pyplot as plt 
import numpy as np 

values = np.array([0.00388632352941, 0.00375827941176, 0.00355033823529,  0.00328273529412, 0.00294677941176, 0.00272142647059, 0.00246463235294,  0.00227766176471, 0.00213151470588, 0.00202594117647, 0.00183544117647,  0.00162102941177, 0.00148372058824, 0.00128380882353, 0.00112252941176,  0.000931544117647, 0.000786573529412, 0.000658220588235, 0.000584485294118,  0.000524044117647, 0.000562485294118, 0.000716441176471, 0.000872617647059,  0.00109039705882, 0.00124138235294, 0.00136894117647, 0.00143985294118,  0.00134760294118, 0.00121794117647, 0.00112772058824, 0.00109435294118,  0.00102432352941, 0.00101069117647, 0.00102417647059, 0.00104895588235,  0.00101776470588, 0.00101494117647, 0.000885558823529, 0.00078075,  0.000752647058824, 0.000667691176471, 0.000593220588236, 0.000658647058823,  0.000742117647059, 0.000651470588235, 0.000604647058824, 0.000584573529412,  0.00049530882353, 0.000281235294118, 0.000355029411765]) 
fig, ax = plt.subplots() 
ax.bar(np.arange(values.shape[0]), values) 
plt.show() 

enter image description here

+0

당신의 원이 얼마나 큰 확실하지. 즉 작은 경우 해당 서클에 대한 클리핑을 해제하십시오. 즉'clip_on = False'를 추가하십시오. – klimaat

+0

나는 그것을 시도했지만 아무런 결과가 없다. –

답변

1

그래서 내 대답이 중 어떤 원을 포함하지 않는, 더 원이 없습니다.

플롯에서 데이터 주위에 약간의 공백을 두려면 ax.margins(y=ymargin)을 사용하십시오. 여기에서 ymargin은 데이터의 각면에 추가 할 공간의 백분율입니다. 나는. 데이터가 0에서 1로 이동하고 ymargin = 0.1의 여백을 추가하면 해당 일람은 (-0.1, 1.1)이됩니다. (하나의 제한이 0인지 아닌지에 대해 독립적입니다.)

기본적으로 이것은 막대 그래프의 경우 작동하지 않습니다. 일반적으로 막대가 어딘가에서 시작되도록하는 것이 바람직하지 않기 때문입니다 하단 축과 반대되는 공기. 이 동작은 use_sticky_edges 플래그를 사용하여 조정됩니다. 이 플래그를 False으로 설정하면 축의 양 끝에 적용되는 여백의 동작을 되돌릴 수 있습니다. 시행하려면 나중에 ax.autoscale_view으로 전화해야합니다.

import matplotlib.pyplot as plt 
import numpy as np 

values = np.array([3.89, 3.76, 3.55, 3.28, 2.95, 2.72, 2.46, 2.28, 2.13, 2.03, 1.84, 
        1.62, 1.48, 1.28, 1.12, 0.93, 0.79, 0.66, 0.58, 0.52, 0.56, 0.72, 
        0.87, 1.09, 1.24, 1.37, 1.44, 1.35, 1.22, 1.13, 1.09, 1.02, 1.01, 
        1.02, 1.05, 1.02, 1.01, 0.89, 0.78, 0.75, 0.67, 0.59, 0.66, 0.74, 
        0.65, 0.60, 0.58, 0.50, 0.28, 0.36]) 

fig, ax = plt.subplots() 
ax.bar(np.arange(values.shape[0]), values) 

ax.margins(y=0.3) 
ax.use_sticky_edges = False 
ax.autoscale_view(scaley=True) 
plt.show() 

enter image description here