2014-06-24 6 views
0

다음 코드를 실행하면 마지막 2 개의 보조 눈금 선이 x 및 y에서 누락 된 플롯이 제공됩니다. 데이터를 다듬거나 허용되는 데이터 양을 확장하는 코드 섹션을 제거하면 (xylimit)이 문제가 해결 될 수 있습니다. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니?데이터 범위의 일부를 삭제 한 후 matplotlib의 일부 보조 눈금 선 누락

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 
from pylab import * 

l=201 
x=linspace(-l,l,201) 
y=linspace(-l,l,201) 
z=np.random.rand(l,l) 

xylimit=100 

i=0 
while i<len(x[:]): 
    if abs(x[i])>xylimit: 
     x=np.delete(x,i,0) 
     y=np.delete(y,i,0) 
    else: 
     i+=1 
i=0 
while i<len(y[:]): 
    if abs(y[i])>xylimit: 
     x=np.delete(x,i,0) 
     y=np.delete(y,i,0) 
    else: 
     i+=1 

z=np.random.rand(len(x),len(x)) 

xgridlines = getp(gca(), 'xgridlines') 
ygridlines = getp(gca(), 'ygridlines') 
plt.minorticks_on() 
plt.grid(b=True, which='both',linestyle='-') 

l=plt.contourf(x,y,z,np.linspace(0,1,255)) 

plt.show() 

contourplot

답변

1

하기 matplotlib의 작은 눈금 로케이터 (matplotlib.ticker.AutoMinorLocator)에서 버그가 수 있도록 보인다. 90.0의 진드기는 존재하지 않습니다. 이렇게하면 :

xlim(-98.5,100.0) 

눈금이 기적적으로 나타납니다. 그러나 마지막 줄을 그릴 수없는 번호 (예 : 100.0 미만)를 사용하면 눈금이 사라집니다. 문제

gca().get_xaxis().set_minor_locator(matplotlib.ticker.FixedLocator(
    array([-90., -80., -70., -60., -40., -30., -20., -10., 10., 20., 30., 
    40., 60., 70., 80., 90.]))) 

이 불행하게도 손으로 위치를 설정해야합니다 해결하기 위해 못생긴 매뉴얼 해킹이 있습니다

>>> gca().get_xaxis().get_minorticklocs() 

array([-90., -80., -70., -60., -40., -30., -20., -10., 10., 20., 30., 
    40., 60., 70., 80.]) 

:

진드기의 부족에 의해 확인 될 수있다.

figure() 
plot([0,100], [0,100]) 
axis([0,99.5,0,99.5]) 
minorticks_on() 
grid(which='both') 

그리고 버그 ... 지금 ticker.py의 라인 1732에있을 것 같다 :


버그의 최소한의 예 (네임 스페이스는 생략, 내가 ipython + pylab을 사용) github에서 사용할 수 있습니다 (또는 버전 1.3.1의 1712 행). 버전이 변경 될 수 있으므로, 난 여기가 붙여 있습니다 :

if len(majorlocs) > 0: 
    t0 = majorlocs[0] 
    tmin = np.ceil((vmin - t0)/minorstep) * minorstep 
    tmax = np.floor((vmax - t0)/minorstep) * minorstep 
    locs = np.arange(tmin, tmax, minorstep) + t0 
    cond = np.abs((locs - t0) % majorstep) > minorstep/10.0 
    locs = locs.compress(cond) 
else: 
    locs = [] 

자체가 라인 locs = ...에 버그를. 실제로 두 버그가있다 :

  • 때문에 내 간단한 예 TMIN = 0.0에서, 여기에 도시 된 방법에서 사용 arange 티맥스 = 95.0 및 minorstep = 5.0; 일반적인 경우에는 arange이 95.0을 제공하면 투명 함이 나타납니다. (실제로는 정수를 사용하면 항상 잘못된 방식으로 작동하지만 반올림 오류가 발생하기 쉽습니다.)
  • 수학이 바로 위의 경우에도 (예제에서 수행) 마지막 샘플은 누락됩니다.

제 의견으로는 정수를 사용하도록 다시 작성해야합니다. 이 적어도 내 matplotlib 다시 라인을 가지고

locs = np.arange(tmin, tmax + minorstep/2., minorstep) + t0 

: 임시 치료로서, 하나와 선을 대체 할 수 있습니다.


그래서 짧은 대답은 : 파이썬 패키지 폴더에 어딘가에 ticker.py 찾기 작은 편집을하고, 작업이 완료된다.