메모
전체 예제 코드를 다운로드 하려면 여기 를 클릭 하십시오.
파이플롯 튜토리얼 #
pyplot 인터페이스 소개. Matplotlib 작동 방식에 대한 개요는 빠른 시작 가이드 를 참조 하고 지원되는 사용자 API 간의 장단점에 대한 설명은 Matplotlib 애플리케이션 인터페이스(API) 를 참조하세요.
pyplot 소개 #
matplotlib.pyplot
matplotlib가 MATLAB처럼 작동하도록 하는 함수 모음입니다. 각 pyplot
기능은 그림을 약간 변경합니다. 예를 들어, 그림을 만들고, 그림에 플로팅 영역을 만들고, 플로팅 영역에 일부 라인을 플로팅하고, 플롯을 레이블로 장식합니다.
다양한 상태 에서 matplotlib.pyplot
함수 호출 간에 보존되므로 현재 그림 및 플로팅 영역과 같은 항목을 추적하고 플로팅 함수는 현재 축으로 지정됩니다(여기서 "축"은 문서의 대부분의 위치에서 참조됨).
두 개 이상의 축에 대한 엄격한 수학 용어가 아닌 그림 의 축
부분 ).
메모
암시적 pyplot API는 일반적으로 덜 장황하지만 명시적 API만큼 유연하지도 않습니다. Axes
여기에서 볼 수 있는 대부분의 함수 호출은 개체 에서 메서드로 호출할 수도 있습니다 . 이것이 어떻게 작동하는지 보려면 자습서와 예제를 찾아보는 것이 좋습니다. 지원되는 사용자 API의 장단점에 대한 설명은 Matplotlib API(응용 프로그램 인터페이스) 를 참조하십시오 .
pyplot으로 시각화를 생성하는 것은 매우 빠릅니다.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
x축의 범위가 0-3이고 y축의 범위가 1-4인 이유가 궁금할 수 있습니다. 단일 목록 또는 배열을 에 제공하면
plot
matplotlib는 이를 y 값의 시퀀스라고 가정하고 자동으로 x 값을 생성합니다. 파이썬 범위는 0부터 시작하므로 기본 x 벡터는 y와 길이가 같지만 0부터 시작합니다. 따라서 x 데이터는
.[0, 1, 2, 3]
plot
다재다능한 함수이며 임의 개수의 인수를 사용합니다. 예를 들어 x 대 y를 플롯하려면 다음과 같이 작성할 수 있습니다.
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
[<matplotlib.lines.Line2D object at 0x7f2cf9d23b20>]
플롯 스타일 서식 지정 #
모든 x, y 인수 쌍에 대해 플롯의 색상 및 선 유형을 나타내는 형식 문자열인 선택적 세 번째 인수가 있습니다. 형식 문자열의 문자와 기호는 MATLAB에서 가져온 것이며 색상 문자열을 선 스타일 문자열과 연결합니다. 기본 형식 문자열은 파란색 실선인 'b-'입니다. 예를 들어 위의 빨간색 원으로 플롯하려면 다음을 발행합니다.
plot
선 스타일 및 형식 문자열의 전체 목록은 설명서를 참조하십시오 . axis
위 예제 의
함수 는 좌표축의 뷰포트 목록을 가져오고 지정합니다.[xmin, xmax, ymin, ymax]
matplotlib가 목록 작업으로 제한된다면 숫자 처리에 상당히 쓸모가 없을 것입니다. 일반적으로 numpy 배열을 사용합니다. 실제로 모든 시퀀스는 내부적으로 numpy 배열로 변환됩니다. 아래 예제는 배열을 사용하여 하나의 함수 호출에서 서로 다른 형식 스타일로 여러 줄을 플로팅하는 방법을 보여줍니다.
키워드 문자열로 그리기 #
문자열을 사용하여 특정 변수에 액세스할 수 있는 형식의 데이터가 있는 경우가 있습니다. 예를 들어,
numpy.recarray
또는 pandas.DataFrame
.
Matplotlib를 사용하면 이러한 객체에 data
키워드 인수를 제공할 수 있습니다. 제공된 경우 이러한 변수에 해당하는 문자열로 플롯을 생성할 수 있습니다.
data = {'a': np.arange(50),
'c': np.random.randint(0, 50, 50),
'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100
plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()
범주형 변수로 플로팅하기 #
범주형 변수를 사용하여 플롯을 생성하는 것도 가능합니다. Matplotlib를 사용하면 범주형 변수를 많은 플로팅 함수에 직접 전달할 수 있습니다. 예를 들어:
names = ['group_a', 'group_b', 'group_c']
values = [1, 10, 100]
plt.figure(figsize=(9, 3))
plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting')
plt.show()
라인 속성 제어 #
선에는 선 너비, 대시 스타일, 앤티앨리어싱 등 설정할 수 있는 많은 속성이 있습니다. 참조하십시오 matplotlib.lines.Line2D
. 선 속성을 설정하는 방법에는 여러 가지가 있습니다.
키워드 인수 사용:
Line2D
인스턴스 의 setter 메서드를 사용합니다 . 객체plot
목록을 반환 합니다.Line2D
예를 들어, . 아래 코드에서 반환된 목록의 길이가 1이 되도록 한 줄만 있다고 가정합니다. 해당 목록의 첫 번째 요소를 가져오기 위해 튜플 압축 해제를 사용합니다.line1, line2 = plot(x1, y1, x2, y2)
line,
사용하십시오
setp
. 아래 예제에서는 MATLAB 스타일 함수를 사용하여 라인 목록에 여러 속성을 설정합니다.setp
개체 목록 또는 단일 개체로 투명하게 작동합니다. Python 키워드 인수 또는 MATLAB 스타일 문자열/값 쌍을 사용할 수 있습니다.lines = plt.plot(x1, y1, x2, y2) # use keyword arguments plt.setp(lines, color='r', linewidth=2.0) # or MATLAB style string value pairs plt.setp(lines, 'color', 'r', 'linewidth', 2.0)
사용 가능한 Line2D
속성은 다음과 같습니다.
재산 |
값 유형 |
---|---|
알파 |
뜨다 |
생기 있는 |
[참 | 거짓] |
앤티앨리어싱 또는 aa |
[참 | 거짓] |
클립박스 |
matplotlib.transform.Bbox 인스턴스 |
클립온 |
[참 | 거짓] |
clip_path |
Path 인스턴스와 Transform 인스턴스, Patch |
색상 또는 c |
모든 matplotlib 색상 |
포함 |
적중 테스트 기능 |
dash_capstyle |
[ |
dash_joinstyle |
[ |
대시 |
포인트의 켜짐/꺼짐 잉크 순서 |
데이터 |
(np.array xdata, np.array ydata) |
수치 |
matplotlib.figure.Figure 인스턴스 |
상표 |
모든 문자열 |
선 스타일 또는 ls |
[ |
선폭 또는 lw |
부동 소수점 값 |
채점자 |
[ |
markeredgecolor 또는 mec |
모든 matplotlib 색상 |
markeredgewidth 또는 mew |
부동 소수점 값 |
markerfacecolor 또는 mfc |
모든 matplotlib 색상 |
마커 크기 또는 ms |
뜨다 |
마크에브리 |
[ 없음 | 정수 | (시작, 보폭) ] |
이쑤시개 |
대화식 라인 선택에 사용 |
반경 |
선 선택 선택 반경 |
solid_capstyle |
[ |
solid_joinstyle |
[ |
변환 |
matplotlib.transforms.Transform 인스턴스 |
보이는 |
[참 | 거짓] |
xdata |
np.array |
ydata |
np.array |
조더 |
어떤 숫자 |
설정 가능한 라인 속성 목록을 얻으려면
setp
라인을 인수로 사용하여 함수를 호출하십시오.
In [69]: lines = plt.plot([1, 2, 3])
In [70]: plt.setp(lines)
alpha: float
animated: [True | False]
antialiased or aa: [True | False]
...snip
여러 도형 및 축 작업하기 #
MATLAB 및 pyplot
에는 현재 그림과 현재 축의 개념이 있습니다. 모든 플로팅 함수는 현재 축에 적용됩니다. 이 함수 gca
는 현재 축(
matplotlib.axes.Axes
인스턴스)을 gcf
반환하고 현재 그림( matplotlib.figure.Figure
인스턴스)을 반환합니다. 일반적으로 이 모든 것이 뒤에서 처리되기 때문에 이에 대해 걱정할 필요가 없습니다. 아래는 두 개의 서브플롯을 만드는 스크립트입니다.
figure
존재하지 않는 경우 Axes가 생성되는 것과 마찬가지로(명시적
subplot()
호출과 동일) 그림이 존재하지 않는 경우 Figure가 생성되기 때문에 여기서 호출은 선택 사항입니다. 이 subplot
호출 은 1 에서 까지의 범위를 지정합니다
. 호출 의 쉼표 는 선택 사항 입니다. 그래서 와 동일합니다 .numrows,
numcols, plot_number
plot_number
numrows*numcols
subplot
numrows*numcols<10
subplot(211)
subplot(2, 1, 1)
임의 개수의 서브플롯과 축을 생성할 수 있습니다. 축을 직사각형 그리드가 아니라 수동으로 배치하려면 를 사용하여 모든 값이 분수(0에서 1) 좌표에 axes
있는 위치를 지정할 수 있습니다 . 축을 수동으로 배치하는 예는 Axes Demo 를 참조 하고 서브플롯 이 많은 예는 다중 서브플롯 을 참조하십시오.axes([left, bottom,
width, height])
figure
Figure 번호가 증가하는 다중 호출을 사용하여 여러 Figure를 생성할 수 있습니다
. 물론 각 도형에는 원하는 만큼 많은 축과 하위 그림이 포함될 수 있습니다.
import matplotlib.pyplot as plt
plt.figure(1) # the first figure
plt.subplot(211) # the first subplot in the first figure
plt.plot([1, 2, 3])
plt.subplot(212) # the second subplot in the first figure
plt.plot([4, 5, 6])
plt.figure(2) # a second figure
plt.plot([4, 5, 6]) # creates a subplot() by default
plt.figure(1) # figure 1 current; subplot(212) still current
plt.subplot(211) # make subplot(211) in figure1 current
plt.title('Easy as 1, 2, 3') # subplot 211 title
clf
로 현재 그림을 지우고 로 현재 축을 지울 수 있습니다 cla
. 상태(특히 현재 이미지, 그림 및 축)가 배후에서 유지되는 것이 짜증나더라도 절망하지 마십시오. 이것은 대신 사용할 수 있는 객체 지향 API를 둘러싼 얇은 상태 저장 래퍼일 뿐입니다. ( 아티스트 튜토리얼 참조 )
많은 그림을 만드는 경우 한 가지 더 알고 있어야 합니다. 그림에 필요한 메모리는 그림이 로 명시적으로 닫힐 때까지 완전히 해제되지 않습니다
close
. 그림에 대한 모든 참조를 삭제하거나 창 관리자를 사용하여 그림이 화면에 나타나는 창을 죽이는 것은 충분하지 않습니다. 왜냐하면 pyplot close
은 호출될 때까지 내부 참조를 유지하기 때문입니다.
텍스트 작업 #
text
는 임의의 위치에 텍스트를 추가하는 데 사용할 수 있으며
xlabel
, ylabel
및 title
는 표시된 위치에 텍스트를 추가하는 데 사용됩니다( 자세한 예 는 Matplotlib 플롯의 텍스트 참조).
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
모든 text
함수는 matplotlib.text.Text
인스턴스를 반환합니다. 위의 줄과 마찬가지로 키워드 인수를 텍스트 함수에 전달하거나 다음을 사용하여 속성을 사용자 지정할 수 있습니다 setp
.
t = plt.xlabel('my data', fontsize=14, color='red')
이러한 속성은 텍스트 속성 및 레이아웃 에서 자세히 다룹니다 .
텍스트에서 수학적 표현 사용 #
matplotlib는 모든 텍스트 표현식에서 TeX 방정식 표현식을 허용합니다. 예를 들어 표현을 쓰려면\(\sigma_i=15\)제목에 달러 기호로 둘러싸인 TeX 표현식을 작성할 수 있습니다.
plt.title(r'$\sigma_i=15$')
제목 r
문자열 앞에 오는 것이 중요합니다. 문자열이 원시 문자열이고 백슬래시를 파이썬 이스케이프로 취급하지 않는다는 것을 나타냅니다. matplotlib에는 TeX 표현식 파서 및 레이아웃 엔진이 내장되어 있으며 자체 수학 글꼴을 제공합니다. 자세한 내용은
수학 표현식 작성 을 참조하세요 . 따라서 TeX을 설치하지 않고도 여러 플랫폼에서 수학적 텍스트를 사용할 수 있습니다. LaTeX 및 dvipng가 설치되어 있는 사용자의 경우 LaTeX를 사용하여 텍스트 형식을 지정하고 출력을 표시 그림이나 저장된 포스트스크립트에 직접 통합할 수도 있습니다 . LaTeX를 사용한 텍스트 렌더링을 참조하십시오 .
주석 텍스트 #
위 의 기본 text
기능을 사용하면 축의 임의 위치에 텍스트가 배치됩니다. 텍스트의 일반적인 용도는 플롯의 일부 기능에 주석을 추가하는 것이며 이
annotate
메서드는 주석을 쉽게 만들 수 있는 도우미 기능을 제공합니다. 주석에서 고려해야 할 두 가지 사항이 있습니다. 인수로 표시되는 주석이 추가되는 xy
위치와 텍스트의 위치입니다 xytext
. 이 두 인수는 모두 튜플입니다.(x, y)
이 기본 예에서 xy
(화살표 끝)과 xytext
위치(텍스트 위치)는 모두 데이터 좌표에 있습니다. 선택할 수 있는 다른 다양한 좌표계가 있습니다
. 자세한 내용은 기본 주석 및 고급 주석 을 참조하십시오. 플롯에 주석 추가 에서 더 많은 예를 찾을 수 있습니다
.
대수 및 기타 비선형 축 #
matplotlib.pyplot
선형 축 스케일뿐만 아니라 로그 및 로짓 스케일도 지원합니다. 이는 데이터가 여러 자릿수에 걸쳐 있는 경우 일반적으로 사용됩니다. 축의 배율을 변경하는 것은 쉽습니다.
plt.xscale('로그')
y 축에 대해 동일한 데이터와 서로 다른 배율이 있는 4개의 플롯의 예가 아래에 나와 있습니다.
# Fixing random state for reproducibility
np.random.seed(19680801)
# make up some data in the open interval (0, 1)
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))
# plot with various axes scales
plt.figure()
# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)
# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)
# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.01)
plt.title('symlog')
plt.grid(True)
# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)
# Adjust the subplot layout, because the logit one may take more space
# than usual, due to y-tick labels like "1 - 10^{-3}"
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
wspace=0.35)
plt.show()
자신의 저울을 추가할 수도 있습니다. 자세한 내용은 참조 matplotlib.scale
하십시오.
스크립트의 총 실행 시간: (0분 4.033초)