>  기사  >  백엔드 개발  >  Python 그리기 라이브러리의 기본 작동 방법 소개

Python 그리기 라이브러리의 기본 작동 방법 소개

Y2J
Y2J원래의
2018-05-21 11:31:425951검색

이 글에서는 주로 numpy+matplotlib를 사용한 그리기의 기본 작업을 소개합니다. 글의 소개는 매우 자세하며 matplotlib 그리기를 배우는 데 필요한 특정 참고 학습 가치가 있습니다.

간단한 설명

Matplotlib은 Python 스크립트를 이용하여 쉽게 꺾은선형 차트를 그릴 수 있는 Python 기반의 2D 도면 라이브러리입니다. 히스토그램, 파워 스펙트럼, 산점도 등과 같은 차트가 있으며 구문이 간단합니다. 자세한 소개는 matplot 공식 홈페이지를 참고해주세요.

Numpy(Numeric Python)는 matlab을 모방한 Python 수치 연산의 확장입니다. 이는 행렬 데이터 유형, 벡터 처리 및 정교한 연산 라이브러리와 같은 다양한 고급 수치 프로그래밍 도구를 제공합니다. 엄격한 디지털 처리를 위해 특별히 설계되었으며, 등장 이후 NASA는 원래 포트란과 매트랩으로 하던 많은 작업을 numpy에 넘겨주어 그 위력을 발휘했다고 합니다. . . 그의 공식 웹사이트는 여기이며 구체적인 정보는 여기에 있습니다.

설치

$sudo apt-get install python-matplotlib
$sudo apt-get install python-numpy

(니울리다파 좋아요~)

사용

matplotlib는 스크립트에서 사용할 수 있지만 ipython에서 사용하면 더 눈부실 것입니다( –pylab 매개변수를 직접 추가하면 패키지를 가져오는 과정을 피할 수 있습니다). Matlab/Mathematica와 유사 동일한 기능, 즉시 입력, 즉시 출력. 개인적으로는 직설적으로 말하면 Matlab/Mathematica를 흉내내고 있다고 생각하지만 확실히 전자보다 프로그램하기가 더 편리합니다.

matplot은 numpy 패키지와 함께 사용해야 하는 경우가 많습니다. numpy 패키지에 대해서는 별도로 언급하지 않겠습니다. 한 가지 주목할 점은 numpy 패키지를 일반적으로 다음과 같이 가져옵니다.

import numpy as np

는 np라는 별칭을 제공하며 이는 거의 관례입니다.

python이나 ipython에서 help(*찾아야 하는 함수*)를 입력하기만 하면 됩니다(물론 먼저 패키지를 가져와야 합니다).

첫 번째 이미지

가져와야 하는 패키지:

import numpy as np
from pylab import *

아니요 . 함수 이미지

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plot(X,C)
plot(X,S)
show()

MATLAB 기초를 사용하는 학생들에게는 확실히 친숙할 것입니다. . . 예, 이 두 모듈의 조합은 matlab의 사용법과 거의 동일합니다. .

1. 먼저 np.linspace 메서드를 사용하여 배열 X를 생성합니다. 이 배열은 $-pi$부터 $pi$까지 시작하고 총 256개의 요소를 포함하는 배열입니다. 끝점 매개변수는 첫 번째 끝점과 마지막 끝점을 포함하는지 여부를 나타냅니다(해당 값은 True 또는 False이며 첫 번째 문자는 대문자여야 합니다...). 물론 이 배열은 일반적인 배열일 뿐 다른 배열과 다르지 않습니다.

2. 그런 다음 np.cos()np.sin() 메서드를 사용하여 X 배열에 대해 작업을 수행하고 X의 각 요소를 계산하고 결과 배열을 생성합니다. (반복 프로세스 제거).

3. 그런 다음 pylab의 플롯 메소드를 호출합니다. 첫 번째 매개변수는 가로축 배열, 두 번째 매개변수는 세로축 배열이며 다른 매개변수는 당분간 논의하지 않습니다. 그러면 기본 차트가 생성됩니다. (바로 표시되지는 않습니다.)

4. 물론 차트를 표시하려면 마지막에 show 메소드를 호출해야 합니다.

5. 결과:

차트 이름은 Figure1입니다. 왼쪽 하단에 여러 개의 버튼이 있습니다. 매우 실용적입니다. 오른쪽 하단에 마우스의 현재 왼쪽이 표시되므로 매우 편리합니다.

차트 레이아웃 및 좌표 분포

각 차트는 다음 명령 그림을 통해 그림으로 생성할 수 있습니다. :

figure(figsize=(8,6), dpi=80)

여기서는 매개변수의 순서에 제한은 없으나, 매개변수 이름을 기준으로 각 매개변수를 구별하므로 매개변수 이름을 반드시 추가해야 하며 이는 C 언어 다양한 유형의 기능. figsize 매개변수는 그림의 종횡비를 나타내고, dpi는 각 부분의 길이를 나타냅니다. 예를 들어 여기서는 이미지가 640x480임을 의미합니다.

명령을 출력하면 바로 창이 나타나며, 이후의 모든 플롯 명령은 show 명령을 입력하지 않고도 바로 이 창에 표시됩니다.

그림은 여러 차트를 표시할 수도 있습니다. 다음 기능을 사용하여 그림을 분할할 수 있습니다.

subplot(3,4,6)

이렇게 하면 현재 그림이 3행으로 분할됩니다. 4개의 열을 만들고 6번째 열, 즉 2행의 3번째 열을 활성화합니다. 향후 플롯은 이 하위 테이블에 생성됩니다. 이를 교체해야 하는 경우 하위 플롯 명령을 다시 입력하여 새 위치를 결정할 수 있습니다.

또한 차트에 표시된 범위가 만족스럽지 않은 경우 차트의 좌표 범위를 직접 조정할 수도 있습니다.

xlim(-4.0,4.0)
ylim(-1.0,1.0)

这就表示x轴的范围设置在-4到4,y轴的范围设置在-1到1。当然,如果是想相对的进行修改我们可以利用下numpy数组的min和max方法。比如X.min() 这样的东西。

如果对坐标显示的密度啊什么的不满意,我们也可以调节他的标注点:

xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1,1,5,endpoint=True))

对于xticks和yticks,我们实际上可以传入任意的数组,这里不过是为了方便而用numpy快速生成的等差数列。

当然,我们也可以给标注点进行任意的命名,像下面这样:

xticks([1,2,3,4,5],['one','two','three','four','five'])

效果也很好想象,就不贴图了。需要注意的是这里也可以支持LaTex语法,将LaTex引用在两个$之间就可以了。(关于LaTex)

这里也有个小窍门,就是如果想不显示标注的话,我们就可以直接给xticks赋一个空的数组。

更改色彩和线宽

我们可以在画plot的时候用如下方法指定他的颜色和线宽:

plot(X, C, color='#cadae3', linestyle='-',linewidth=1.3, marker='o', markerfacecolor='blue', markersize=12,)

同样,这里参数的顺序不重要,名字才重要。

color参数可以指定RGB的色相,也可以用一些默认的名字,比如red blue之类的。

linestyle参数则指定了线的样式,具体参照以下样式:

参数 样式
‘-‘ 实线
‘–' 虚线
‘-.' 线-点
‘:' 点虚线

linewidth参数指定折线的宽度,是个浮点数。

marker参数指定散点的样式,具体参照以下样式:

参数 样式
‘.' 实心点
‘o' 圆圈
‘,' 一个像素点
‘x' 叉号
‘+' 十字
‘*' 星号
‘^' ‘v' ‘545710c31060c68aa33a6f2f6c6a04be' 三角形(上下左右)
‘1' ‘2' ‘3' ‘4' 三叉号(上下左右)

markerfacecolor参数指定marker的颜色

markersize参数指定marker的大小

这样就基本上能够自定义任何的折线图、散点图的样式了。

移动轴线

这段有点小复杂,暂时不想具体了解奇奇怪怪的函数调用,姑且先记录下用法和原理:

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

我们知道一张图有上下左右四个轴线,这里我们把右边和上边的轴线颜色调为透明,然后把下边设置到y轴数据为0的地方,把左边设置到x轴数据为0的地方。这样我们就能根据自己想要位置来调节轴线了。

比如下面这段官方的代码:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
 [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
 [r'$-1$', r'$0$', r'$+1$'])
plt.show()

显示的结果就是:

图例和注解

图例十分简单,下述代码就可以解决:

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')

在plot里指定label属性就好了,最后调用下legend函数来确定图例的位置,一般就是'upper left'就好了。

注解就有点麻烦了,要用到annotate命令,挺复杂的,暂时是在不想看,姑且贴一段完整的代码和效果图吧:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
  [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
  [r'$-1$', r'$+1$'])
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)],
  color ='blue', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
  xy=(t, np.sin(t)), xycoords='data',
  xytext=(+10, +30), textcoords='offset points', fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.plot([t,t],[0,np.sin(t)],
  color ='red', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
  xy=(t, np.cos(t)), xycoords='data',
  xytext=(-90, -50), textcoords='offset points', fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.legend(loc='upper left', frameon=False)
plt.savefig("../figures/exercice_9.png",dpi=72)
plt.show()

效果图:

还是十分高能的。。。

总结

【相关推荐】

1. Python免费视频教程

2. Python基础入门教程

3. Python在数据科学中的应用

위 내용은 Python 그리기 라이브러리의 기본 작동 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.