2013-06-03 3 views
7

현재 데이터 플롯의 가능성을 높이기 위해 현재 logscale을 사용 중입니다. 그럼에도 불구하고 내 데이터는 0 값으로 구성됩니다. log (0)이 정의되지 않았으므로 이러한 0 값은 logscale에서 작동하지 않습니다. matplotlib의 값이 0 인 로그 스케일 플롯

따라서 예컨대,

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('log') 
ax.set_xscale('log') 

완전히 제로 값을 생략합니다. 이 행동을 받아 들일 수 있습니까? 최소한 어떤 종류의 경고가 있어야합니다. 우연히 만 인식했습니다. logscale에 0 값 데이터를 플로팅하는 방법이 있습니까?

감사합니다.

P .: 나는 이것이 stackoverflow에 맞기를 희망합니다. matplotlib의 메일 링리스트를 찾지 못했습니다.

+1

MPL 메일 링리스트 -> http://sourceforge.net/mail/?group_id=80706 [제로 값하기 matplotlib 로그 스케일]의 – tacaswell

+2

중복 가능성 (http://stackoverflow.com/questions/16382917/matplotlib-logarithmic-scale-with-zero-value) –

+0

질문에는 위의 두 가지 가능한 솔루션이 있습니다. –

답변

17

"symlog"플롯을 사용하는 것이 가장 쉽습니다. 0에 가까운 간격은 선형 스케일이므로 0을 표시 할 수 있습니다.

enter image description here

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('symlog') 
ax.set_xscale('symlog') 
plt.show() 
Symlog 선형 스케일을 사용하는 제로 (위와 아래) 근처의 작은 간격을 설정한다. 이렇게하면 log(x)을 폭발시키지 않고 모든 것을 교차시킬 수 있습니다 (또는 -inf가 아니라 오히려). SO를 여기 응답으로 좋은 시각적 비교있다

: https://stackoverflow.com/a/3513150/325565

+0

좋은 답변입니다. 고마워. symlog가 정확히 무엇을하는지 자세히 설명해 주시겠습니까? – fsociety

+1

예! 업데이트를 참조하십시오. matplotlib 갤러리에는 몇 가지 예가 있지만 (예 : http://matplotlib.org/examples/pylab_examples/symlog_demo.html), 내가 연계 한 답변만큼 명확하지 않습니다. –

+0

슈퍼 유용한 정보. 감사. – Newb

관련 문제