2016-09-29 2 views
1

비슷한 윤곽을 그리는 기능을 많이 작성했습니다. 내가하는 일의 최소한의 형태를 보여주고있다. 이 최소 예에서는 (0,0) A, (3,0) B, (3,3) C, (0,3) D에 틱만 넣고 싶습니다. A, B, C, D 레이블 진드기의 나는 A와 B를 넣을 때까지 일할 수있다. 나는 twiny()을 만들어서 C와 D 틱을 만들어서 더 이상 일할 수 없다. 틱은 예상되는 위치에 배치되지 않으며 종횡비는 제거됩니다. 나는 mpl_toolkits.axes_grid1에서 host_subplot을 사용해 보았지만이 문제를 해결하지 못했습니다.twiny()로 플롯 팅하면 틱이 나타나지 않고 종횡비가 사라집니다.

import matplotlib 
import numpy as np 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as plt 

def plot2DFS(fign,x,y,z): 

    fig = plt.figure(fign) 
    ax = fig.add_subplot(111, adjustable='box-forced', aspect='equal') 
    ax.set_title('Iso-surf contour') 
    ax.contour(x, y, z) 

    ax.spines['left'].set_position('center') 
    ax.spines['right'].set_color('none') 
    ax.spines['bottom'].set_position('center') 
    ax.spines['top'].set_color('none') 

    ax.tick_params(axis='y',which='both', right='off', left='off', labelleft='off') 
    ax.tick_params(axis='x',which='both', bottom='off', top='off') 

    ax.xaxis.set_ticks([0.0,3.0]) 
    ax.xaxis.set_ticklabels(['A','B']) 

    bx = ax.twiny() 
    bx.tick_params(axis='x',which='both', bottom='off', top='off') 
    bx.xaxis.set_ticks([0.0,3.0]) 
    bx.xaxis.set_ticklabels(['D','C']) 

    return 

delta = 0.025 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
plot2DFS(1,X,Y,Z) 
plt.show() 

답변

0

가로 세로 비율은 괜찮습니다. 완벽한 원이 보이지 않습니까?

레이블과 그 위치와 관련하여 matplotlib에게 동등한 x 제한을 원한다고 말할 필요가 있습니다. 기능 끝에 bx.set_xlim(ax.get_xlim())을 넣으십시오.

+0

가로 세로 비율은 정확하지만 이미지가 어떻게 보이는지 확인합니다. 축은 경계에 없거나 자동으로 위치 할 것입니다. 또한 저장하지 않고 파이썬에 show()를 지정하면 축이 이미지 스케일링과는 별도로 테두리와 함께 이동합니다. – Lp13

+0

정확히 어떤 문제인지는 분명하지 않습니다. 나에게 줄거리는 괜찮아 보이지만, 나는 당신이 성취하려고하는 것을 모른다. – ImportanceOfBeingErnest