파이썬에서 matplotlib을 사용하여 로그 축을 플롯하십시오.


369

matplotlib을 사용하여 하나의 로그 축으로 그래프를 플롯하려고합니다.

문서를 읽었지만 구문을 파악할 수 없습니다. 'scale=linear'줄거리 인수에서 와 같이 단순한 것일 수도 있지만 제대로 이해하지 못하는 것 같습니다.

샘플 프로그램 :

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)
pylab.show()

답변:


384

Axes.set_yscale방법을 사용할 수 있습니다 . 그러면 Axes객체가 생성 된 후 배율을 변경할 수 있습니다 . 또한 필요한 경우 사용자가 스케일을 선택할 수 있도록 컨트롤을 구축 할 수 있습니다.

추가 할 관련 줄은 다음과 같습니다.

ax.set_yscale('log')

'linear'선형 스케일로 다시 전환 하는 데 사용할 수 있습니다 . 코드는 다음과 같습니다.

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)

ax.set_yscale('log')

pylab.show()

결과 차트


6
이 방법은 "플롯"뿐만 아니라 모든 종류의 플롯 (예 : 히스토그램)과 함께 작동하기 때문에 좋습니다 (이것은 semilogx / semilogy가하는 것임)
Tim Whitcomb

16
나는 2의 거듭 제곱을 위해 축을 사용하는 방법을 찾고 여기에왔다 : pylab.gca (). set_xscale ( 'log', basex = 2)
zje

53
Matplotlib에는이 semilogy()있습니다. 또한 객체 를 얻을 필요가 없기 때문에을 사용하는 pyplot.yscale()것보다 직접 사용하는 것이 더 쉽습니다 (항상 사용 가능한 것은 아님). ax.set_yscale('log')ax
Eric O Lebigot

5
두 축 모두에서 로그 스케일을 원하면 loglog()x 축 또는 다른 축으로 시도하십시오semilogx()
drevicko

10
@ EOL 나는 반대를 권할 것입니다. 원하는 축 에만 적용 할 있는 명시 적 ax객체 를 사용하는 것이 좋습니다 . pyplot
tacaswell

288

우선, 혼합 pylab하고 pyplot코딩 하는 것은 그리 깔끔하지 않습니다 . 또한 pylab을 사용하는 것보다 pyplot 스타일이 선호 됩니다.

다음은 pyplot함수 만 사용하여 약간 정리 된 코드입니다 .

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

관련 기능은 pyplot.yscale()입니다. 객체 지향 버전을 사용하는 경우 메소드로 대체하십시오 Axes.set_yscale(). pyplot.xscale()(또는 Axes.set_xscale())를 사용하여 X 축의 배율을 변경할 수도 있습니다 .

내 질문 확인 'log'와 'symlog'의 차이점은 무엇입니까? matplotlib이 제공하는 그래프 스케일의 몇 가지 예를 살펴보십시오.


그것을하는 방법을 알아 내려고 힘든 시간을 보냈습니다. 이 대답은 나의 하루를 구했다!
HWende 2016 년

13
pyplot.semilogy()더 직접적입니다.
Eric O Lebigot

64

plot 대신 semilogy 를 사용 하면 됩니다.

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()

1
LOL, 내가 wholetime 위해 (FloatArray) 감사 로그를 시도하고 있었다 당신은 내 일 저장
프라 딥

5
도 있습니다 semilogx은 . 두 축 모두에 로그가 필요한 경우 loglog
drevicko를

40

대수의 기초를 변경하려면 다음을 추가하십시오.

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log

8

나는 이것이 일부 주제가 아니었다는 것을 알고있다. 일부 의견은 이것이 ax.set_yscale('log')"가장 적은"해결책이라고 언급 했기 때문에 반박이 나올 수 있다고 생각했다. ax.set_yscale('log')히스토그램 및 막대 플롯에는 사용하지 않는 것이 좋습니다 . 내 버전 (0.99.1.1)에서 렌더링 문제가 발생합니다.이 문제가 얼마나 일반적인지 잘 모르겠습니다. 그러나 bar와 hist에는 y-scale을 log로 설정하기위한 선택적 인수가 있습니다.

참조 : http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist


5

그래서 당신이 내가 종종 (ipython에서 많이 사용하는 것처럼) 정교하지 않은 API를 사용한다면, 이것은 단순히

yscale('log')
plot(...)

이것이 간단한 답변을 찾는 데 도움이되기를 바랍니다. :).


-1

아래 코드를 사용할 수 있습니다 :

np.log(df['col_whose_log_you_need']).iplot(kind='histogram', bins=100,
                                   xTitle = 'log of col',yTitle ='Count corresponding to column',
                                   title='Distribution of log(col_whose_log_you_need)')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.