2013-04-30 8 views
7

저는 아래 pyx와 matplotlib를 사용하여 bloxplot을 그려 봅니다. X 축에서 두 개의 상자 그림 사이의 거리를 줄일 수있는 방법이 있습니까?두 boxplots 사이의 거리를 줄이기

enter image description here

내가 위의 그림 얻기 위해 사용하고 코드입니다 : (

import matplotlib.pyplot as plt 
from matplotlib import rcParams 
rcParams['ytick.direction'] = 'out' 
rcParams['xtick.direction'] = 'out' 

fig = plt.figure() 
xlabels = ["CG", "EG"] 
ax = fig.add_subplot(111) 
ax.boxplot([values_cg, values_eg]) 
ax.set_xticks(np.arange(len(xlabels))+1) 
ax.set_xticklabels(xlabels, rotation=45, ha='right') 
fig.subplots_adjust(bottom=0.3) 
ylabels = yticks = np.linspace(0, 20, 5) 
ax.set_yticks(yticks) 
ax.set_yticklabels(ylabels) 

ax.tick_params(axis='x', pad=10) 
ax.tick_params(axis='y', pad=10) 

plt.savefig(os.path.join(output_dir, "output.pdf")) 

을 그리고 이것은 내가 시각적으로 좀하고 싶습니다 무엇 예를 들어 가까운 내가 비록

enter image description here

답변

5

ax.set_aspect(1.5) # or some other float 

수가 더 큰 규모 이용 종횡비를 변경하려고하면 좁게 (및 키) 플롯은 같아야 원은 연신 될

높이 num을인지 폭의 배. aspect=1aspect=’equal’과 동일합니다.

http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect

+0

애스펙트를 설정하는 것이 실제로 누락 되었기 때문에 이것을 선택했습니다. 결국 솔루션은 @ tcaswell의 대답에 따라 상자의 너비를 변경하는 것을 암시합니다. –

10

다음 중 하나를 수행 할 수 있습니다 변경 t 다음 상자 그림이) 서로도 조금 더 가까이 있다면 상관 없어 그는 측면 플롯의 비율 또는 같은 widths kwarg (doc)를 사용

ax.boxplot([values_cg, values_eg], widths=1) 

이 상자를 넓게 만들 수 있습니다.

1

이 코드를 쓸 때 :

ax.set_xticks(np.arange(len(xlabels))+1) 

(당신이 나중에 눈금 레이블을 변경하지만 이벤트)는 0에 첫 번째 상자의 플롯과 1의 두 번째 퍼팅하고, 두 번째처럼, 당신이 준 "원한"예제는 1,2,3에 설정되어 있습니다. 그래서 다른 해결책은 xticks 위치와 플롯의 xlim으로 재생하는 것이라고 생각합니다. 가까이를 배치 할

ax.set_xlim(-1.5,2.5) 

를 사용하여 예를 들어

.

+1

이것은 제가 시도한 첫 번째 접근 이었지만 많은 행운이 없었습니다. 이유는 틱 간의 간격은 항상 사용 가능한 공간에 상대적이라고 생각합니다. 따라서 진드기를 원점에 가깝게 움직이면 오른쪽으로 더 많은 공간을 사용할 수있게되고 플롯은 사용 가능한 공간을 차지하면서 "확대"됩니다. ''xlim()''에 관해서는 틱 사이의 간격이 아니라 틱에서 원점까지의 공간을 제어 할 수 있습니다. –

관련 문제