2014-07-21 1 views
3

matplotlib에 함수를 그릴 때, 플롯은 직사각형에 의해 프레임됩니다. I이 직사각형의 길이 및 높이의 비율이 중용, 즉 DX/DY = 1.618033 ...Matplotlib을 사용한 semi-log 플롯의 종횡비

X 및 Y 스케일 제가

구글 사용하여이 용액을 발견 선형 경우가 부여하려는
import numpy as np 
import matplotlib.pyplot as pl 
golden_mean = (np.sqrt(5)-1.0)/2.0 
dy=pl.gca().get_ylim()[1]-pl.gca().get_ylim()[0] 
dx=pl.gca().get_xlim()[1]-pl.gca().get_xlim()[0] 
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box') 

그것이 내가 세미 로그 플롯을 위해,

dy=np.abs(np.log10(pl.gca().get_ylim()[1])-np.log10(pl.gca().get_ylim()[0])) 
dx=np.abs(np.log10(pl.gca().get_xlim()[1])-np.log10(pl.gca().get_xlim()[0])) 
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box') 

그러나이 솔루션을 함께했다 로그 - 로그 플롯 인 경우 내가 set_aspect를 호출 할 때, 나는 얻을

UserWarning: aspect is not supported for Axes with xscale=log, yscale=linear 

누구나이 문제를 해결할 수 있습니까?

+0

모양을 제어하려면'gcf(). set_size_inches (16.18,10)'를 사용할 수 있습니다. 서브 플로트를 설정하면 원하는대로 정확하게 수행 할 수 없습니다. 나는 또한 단일 축에 그 비율을 정확히 집행한다고 생각하지 않는다. 제목, 축 레이블 등은 축이 맞을 때 축을 왜곡시킬 수 있습니다 (확실하지 않음). – Dan

+0

이미 말했듯이, 내가 원하는 것은 아닙니다 :/ – thomasfermi

답변

7

가장 간단한 해결책은 데이터를 로깅 한 다음 lin-lin을 사용하는 것입니다.

축에 레이블을 지정하여 일반 로그 플롯처럼 보이게 할 수 있습니다.

ticks = np.arange(min_logx, max_logx, 1) 
ticklabes = [r"$10^{}$".format(tick) for tick in ticks] 

pl.yticks(ticks, ticklabels) 

당신은 당신이 .format에 대한 중괄호 세 쌍, 이쌍 LaTeX의 중괄호에 대한 한()

ticklabes = [r"$10^{{{}}}$".format(tick) for tick in ticks] 

편집해야합니다 10e9보다 높은 값이있는 경우 : 당신은 또한 원하는 경우 을 0.1ex ... 0.9ex의 틱은 작은 틱을 사용하기를 원합니다. 이들은 log10 (1), log10 (2), log10 (3) ..., log10 (10)에 있어야합니다. , log10 (20) ...

다음과 같이 만들고 설정할 수 있습니다.

minor_ticks = [] 
for i in range(min_exponent, max_exponent): 
    for j in range(2,10): 
     minor_ticks.append(i+np.log10(j)) 


plt.gca().set_yticks(minor_labels, minor=True) 
+0

좋은 생각입니다. 그러나 로그 규모에서 나는 큰 진드기 사이에이 작은 진드기를 가지고 있습니다. 어떻게해야합니까? – thomasfermi

+0

구체적으로 말하면 : 내가 얻는 것은 [this] (http://abload.de/img/logscale_notobkvz.png)이지만 원하는 것은! [that] (http://abload.de/img/logscale91j0w .png) – thomasfermi

+0

@thomasfermi 내가 내 대답을 편집했습니다 – MaxNoe